天天看點

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

1.0 使用SHOW語句找出伺服器上目前存在什麼資料庫:

mysql> SHOW DATABASES;

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

每台機器上的資料庫清單是不同的,但是很可能有mysql和test資料庫。mysql是必需的,因為它描述使用者通路權限,test資料庫經常作為使用者試身手的工作區。

可見我的資料庫裡面沒有test。

2.0 沒有就自己建立:

現在假設一個場景,假定在一個小動物園中有很多寵物,現在想跟蹤關于它們各種類型的資訊。我們通過建立表來儲存資料并根據所需要的資訊裝載他們,然後可以從表中檢索資料來回答關于動物不同種類的問題。

在Unix下,資料庫名稱是區分大小寫的(不像SQL關鍵字),是以你必須總是以menagerie通路資料庫,而不能用Menagerie、MENAGERIE或其它一些變量。

對表名也是這樣的。(在Windows下,該限制不适用,盡管你必須在一個給定的查詢中使用同樣的大小寫來引用資料庫和表。但是,由于多種原因,作為最好的慣例,一定要使用與資料庫建立時的同樣的大小寫。)

mysql> CREATE DATABASE menagerie;

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

3.0 menagerie(小動物園)資料庫我們可以通路它:

mysql>USE menagerie

      

USE,類似QUIT,不需要一個分号。(如果你喜歡,你可以用一個分号終止這樣的語句;這無礙)USE語句在使用上也有另外一個特殊的地方:它必須在一個單行上給出。

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

資料庫隻需要建立一次,但是必須在每次啟動mysql會話時在使用前先選擇它。你可以根據上面的例子執行一個USE語句來實作。還可以在調用mysql時,通過指令行選擇資料庫,隻需要在提供連接配接參數之後指定資料庫名稱。例如:

shell> mysql -h host -u user -p menagerie      
Enter password: ********

      
【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

注意,剛才顯示的指令行中的menagerie不是你的 密碼。如果你想要在指令行上在-p選項後提供 密碼,則不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建議在指令行輸入密碼,因為這樣會暴露 密碼,能被在機器上登入的其它使用者窺探到。

4.0 在該資料庫建立的任何東西可以被通路它的其它人删除,是以,你應該詢問MySQL管理者許可你使用自己的一個資料庫。假定你想要調用你的menagerie,管理者需要執行這樣一條指令:

mysql> GRANT ALL ON menagerie.* TO \'your_mysql_name\'@\'your_client_host\';      

這裡your_mysql_name是配置設定給你的MySQL使用者名,your_client_host是所連接配接的伺服器所在的主機。

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

5.0 建立資料庫是很容易的部分,但是在這時它是空的,正如SHOW TABLES将告訴你的:

 mysql> SHOW TABLES;

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

6.0 較難的部分是決定你的資料庫結構應該是什麼:你需要什麼資料庫表,各資料庫表中有什麼樣的列。

根據假設,我現在包含每個寵物記錄的表,命名為pet表。它可能存在某些資訊:

名字    動物的主人  種類  性别  年齡

其中,年齡比較特殊,年齡随着時間流逝而變化,這意味着你将要不斷地更新你的記錄。單獨存儲一個年齡某個資料很顯然不是很好的解決方案,相反, 存儲一個固定值例如生日比較好,那麼,無論何時你需要年齡,可以以目前日期和出生日期之間的差來計算它。MySQL提供了日期運算函數,是以這并不困難。存儲出生日期而非年齡還有其它優點:

  • 你可以使用資料庫完成這樣的任務,例如生成即将到來的寵物生日的提示。
  • 你可以相對于日期而不止是目前日期來計算年齡。例如,如果你在資料庫存儲死亡日期,你能很容易地計算出一隻寵物死時有多大。

那麼我們的資料庫pet表内元素優化為:

名字    動物的主人  種類  性别  出生和死亡日期

7.0 使用一個CREATE TABLE語句指定你的資料庫表的布局:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),      
    -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

      
【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

可以随時使用DESCRIBE,例如,如果忘記表中的列的名稱或類型時。

8.0 建立表後,需要填入内容。通過LOAD DATA和INSERT語句可以完成該任務。

假定我的寵物紀錄描述如下。(假定在MySQL中期望的日期格式是YYYY-MM-DD;這可能與平常習慣的不同。)

name owner species sex birth death
Fluffy Harold cat f 1993-02-04
Claws Gwen cat m 1994-03-17
Buffy Harold dog f 1989-05-13
Fang Benny dog m 1990-08-27
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11
Whistler Gwen bird 1997-12-09
Slim Benny snake m 1996-04-29

9.0 填充這麼多資料一行行輸入時很笨的方法。因為是從一個空表開始的,填充它的一個簡易方法是建立一個文本檔案,每個動物各一行,然後用一個語句将檔案的内容裝載到表中。

建立一個文本檔案“pet.txt”,每行包含一個記錄,用定位符(tab)把值分開,并且以CREATE TABLE語句中列出的列次序給出。對于丢失的值(例如未知的性别,或仍然活着的動物的死亡日期),你可以使用NULL值。為了在你的文本檔案中表示這些内容,使用\N(反斜線,字母N)。例如,Whistler鳥的記錄應為(這裡值之間的空白是一個定位符):

要想将文本檔案“pet.txt”裝載到pet表中,使用這個指令:

mysql> LOAD DATA LOCAL INFILE \'/path/pet.txt\' INTO TABLE pet;

      

請注意如果用Windows中的編輯器(使用\r\n做為行的結束符)建立檔案,應使用:(在運作OS X的Apple機上,應使用行結束符\'\r\'。)

mysql> LOAD DATA LOCAL INFILE \'/path/pet.txt\' INTO TABLE pet      
    -> LINES TERMINATED BY \'\r\n\';
(在運作OS X的Apple機上,應使用行結束符\'\r\'。)

pet.txt檔案,放在G盤下面)(裡面的空格都是按Tab鍵,不是一個或很多空格鍵造成的)。

        
【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

第一次執行指令時,報出這樣的錯誤:

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

原因是txt檔案儲存時預設ANSI格式,我們需要改成和mysql要求的格式utf-8一樣的:

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊
【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

顯示成功導入,并羅列出清單,在pet.txt文檔中"null"也可以改成“\n”,從代碼中可知,在mysql語句中,位址路徑的寫法同linux,windows系統的是"G:\pet.txt",而linux/mysql用的是“G:/pet.txt”,不能用錯。

【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊
10.0 如果想要一次增加一個新記錄,可以使用INSERT語句。假定張發财把一隻新倉鼠命名為Puffball,你可以使用下面的INSERT語句添加一條新記錄:
      
mysql> INSERT INTO pet      
    -> VALUES (\'Puffball\',\'張發财\',\'hamster\',\'f\',\'1999-03-30\',NULL);      
【資料庫】8.0 MySQL入門學習(八)——建立并使用資料庫、獲得資料庫和表的資訊

可見,可以直接用INSERT語句插入“NULL”代表不存在的值。不能使用LOAD DATA中所示的的”\N”。

END