標籤:
假設你已擁有建立和修改伺服器上資料庫所必需的許可權,那麼我們來看一下如何建立資料庫以及資料庫中的表。在本章的樣本中,我們將為一個虛擬書店建立一個資料庫:
CREATE DATABASE bookstore;
通過這條簡單的SQL語句,我們已經建立了名為bookstore的資料庫。另外,MySQL語句以及子句中的保留字對大小寫不敏感。資料庫與表名對大小寫是否敏感取決於你所用的作業系統,比如在Linux系統上對大小寫是敏感的,而Window系統對大小寫不敏感。按照通常的習慣,在SQL說明文檔中保留字均使用大寫字母,而資料庫名,表名以及欄位名都使用小寫字母。你可能也注意到了SQL語句結尾處的分號。一條完整的SQL語句可能不止一行,直到輸入分號以後,客戶機程式才會將SQL語句發送到伺服器解析執行。
建立好資料庫後,這雖然只是空庫,但是我們可通過下面的語句從預設資料庫切換到新資料庫:
USE bookstore
使用上述語句,就不必在每個SQL語句中都指定所用到的資料庫名了。預設情況下,MySQL會把最後一個指定的資料庫作為當前使用的資料庫。該語句是基於客戶機程式的SQL語句,所以在句尾不必添加分號。
下面,我們將建立第一個表,以後blog將把資料添加到此表中。首先建立一個存放圖書基本資料的資料庫,因為這是書店業務的核心資訊:
CREATE TABLE books ( book_id INT, title VARCHAR(50), author VARCHAR(50));
上面的SQL語句建立了帶有三個列的圖書資訊表。圓括弧內是列的全部列表。接下來輸入DESCRIBE語句可查看剛剛建立的表的結果,該結果以表格形式輸出:
DESCRIBE books;
考慮到書店規模有點大,我們認為還需要為資料元素多添加幾個列:出版商,出版年份,ISBN碼,圖書類型,圖書描述等等。我們還想讓MySQL自動為book_id列分配一個數字編號,這樣在添加一行新記錄時就不必擔心有重複問題發生。另外,我們決定將作者欄位的真實作者名改為標識碼,通過標識碼可將本表與包含作者名欄位的其他表關聯起來。這種方式將資料統一起來,可以簡化資料的輸入,也使排列尋找操作更容易實現。輸入下列SQL語句可在已建立好的資料表中完成修改操作:
ALTER TABLE booksCHANGE COLUMN book_id book_id INT AUTO_INCREMENT PRIMARY KEY,CHANGE COLUMN author author_id INT,ADD COLUMN description TEXT,ADD COLUMN genre ENUM (‘novel‘,‘poetry‘,‘drama‘),ADD COLUMN publisher_id INT,ADD COLUMN pub_year VARCHAR(4),ADD COLUMN isbn VARCHAR(20);
在這個SQL語句的起始行後,可以看到每個修改或添加欄位的子句都是由一個逗號分開的。第二行子句修改book_id列,即便是使用原來的列名和資料類型,我們也要將其重寫一遍。我們還要為其添加AUTO_INCREMENT標記,它負責執行前一段提到的任務,就是將任意一個唯一的值分配給表中的每條記錄。另外,我們還要將該欄位設為主鍵,以提高資料檢索的速度。
第一個CHANGE子句可能會讓人感到迷惑,因為其中列名(book_id)出現了二次。當瞭解CHANGE子句的文法時,你就會明白其中的意義了,第一個book_id表示將要修改的現在列,該子句餘下的部分用於指定一個新列。要想更好地理解這個子句的意思,可查看第二條CHANGE子句:該子句用新列author_id替代了現有列author。資料表中不再有名為author的列。
在第三行子句中,我們修改了author列,令其名稱及資料類型與將要建立的authors表中的名稱與類型一致。如同books表中的索引列代表圖書一樣,authors表中也有一個代表每個作者的索引列。我們把books表和authors表關聯起來做查詢操作,這樣就可通過books表的author_id列找到author表中相應的記錄。由於authors表中相應列的資料類型是INT,所以該子句中author_id列的資料類型也一定是INT。
第四行子句為每本書添加了一個描述列。該列的資料類型是文本類型,文本類型是可變長資料類型,可支援長度小於64KB的資料。
在genre列中,為了確保統一性,事先已列舉了幾個可用的值。該欄位允許為空白值或NULL,空值或NULL並不需要指定。
向books表輸入資料之前,我們先快速建立一個authors表。該表做為備查表。首先要向authors表中添加資料,因為我們向books表中添加資料時,需要知道books表中authors列的標識號:
CREATE TABLE authors( author_id INT AUTO_INCREMENT PRIMARY KEY, author_last VARCHAR(50), author_first VARCHAR(50), country VARCHAR(50));
根據需要,我們還要把books表與authors表通過author_id欄位關聯起來。這個例子先儲存起來後面blog再用。
mysql基礎之建立資料庫和表