MySQL認證教程:create創建數據庫和表
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢MySQL認證教程:create創建數據庫和表,假設你已擁有創建和修改服務器上數據庫所必需的權限,那么我們來看一下如何創建數據庫以及數據庫中的表。在本章的示例中,我們將為一個虛擬的書店建立一個數據庫:
- CREATE DATABASE bookstore;
通過這條簡單的SQL 語句,本書已創建了名為bookstore 的數據庫。你可能已經注意到上述語句中的命令及保留字的字母都是大寫的。這并不是必需的,MySQL 語句以及子句中的保留字對大小寫并不敏感。數據庫與表名對大小寫是否敏感取決于你所用的操作系統,比如在Linux 系統上對大小寫是敏感的,而Windows 系統,對大小寫則不敏感。按照通常的習慣,在SQL 說明文檔中保留字均使用大寫字母,而數據庫名、表名以及字段名都使用小寫字母。你可能也注意到了SQL 語句結尾處的分號。一條完整的SQL 語句可能不止一行,直到輸入分號以后,客戶機程序才會將SQL 語句發送到服務器解析執行。用"\c" 替代分號,可取消正在執行的SQL 語句。
創建好數據庫后,這雖然只是個空庫,但是我們可通過下面的語句從默認數據庫切換到新數據庫:
- USE bookstore
使用上述語句,就不必在每個SQL 語句中都指定所用到的數據庫名了。默認情況下,MySQL 會把最后一個指定的數據庫作為當前使用的數據庫。該語句是基于客戶機程序的SQL 語句,所以在句尾不必添加分號。
下面,我們將創建第一個表,以后本書將把數據添加到此表中。首先創建一個存放圖書基本信息的數據表,因為這是書店業務的核心信息:
- CREATE TABLE books ( book_id INT, title
VARCHAR(50), author VARCHAR(50));
上面的SQL 語句創建了帶有三個列的圖書信息表。圓括號內是列的全部列表。
第一列是每條記錄的標識碼,代表一本書。你可以按照上面的例子將其數據類型設為INTEGER 或INT 。第二列和第三列是可變長的字符類型,每列值的長度不能超過50 。
輸入DESCRIBE 語句可查看剛剛創建的表的結果,該結果以表格形式輸出:
- DESCRIBE books; +---------+---------------+------+---
--+---------+-------+ | Field | Type | Null | Key |
Default | Extra | +---------+---------------+-----
-+-----+---------+-------+ - | book_id | int(11) | YES | | NULL | |
- | title | varchar(50) | YES | | NULL | |
- | author | varchar(50) | YES | | NULL | |
- +---------+---------------+------+-----+---------+-------+
考慮到書店規模有點大,我們認為還需要為數據元素多添加幾個列:出版商、出版年份、ISBN 碼、圖書類型(例如:小說、詩歌、戲劇)、圖書描述,等等。我們還想讓MySQL 自動為book_id 列分配一個數字編號,這樣在添加一行新記錄時就不必擔心有重復問題發生。另外,我們決定將作者字段的真實作者名改成標識碼,通過標識碼可將本表與包含作者名字段的其他表關聯起來。這種方式將數據統一起來,可以簡化數據的輸入,也使排列查找操作更容易實現。輸入下列SQL 語句可在已創建好的數據表中完成修改操作:
- ALTER TABLE books
- CHANGE 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 。
第四行子句為每本書添加了一個描述列。該列的數據類型是文本型,文本類型是可變長數據類型,可支持長度小于64 千字節的數據。然而,還有許多其他因素可進一步約束文本列。請參閱附錄A以查看數據類型列表及其對應的范圍以及其他的限定因素。
在genre 列中,為了確保統一性,事先已列舉了幾個可用的值。該字段允許為空值或NULL ,空值或NULL 并不需要指定。
向books 表輸入數據之前,我們先快速建立一個aurhors 表。該表做為備查表。首先要向author 表中添加數據,因為當我們向books 表中添加數據時,需要知道books 表中authors 列的標識號:
- CREATE TABLE authors
- (author_id INT AUTO_INCREMENT PRIMARY KEY,
- author_last VARCHAR(50),
- author_?rst VARCHAR(50),
- country VARCHAR(50));
盡管我們為虛擬書店添加了其他幾個字段,但authors 表用到的字段并不多。如前段所述,根據需要,我們還要把books 表與authors 表通過author_id 字段關聯在一起。
在authors 表中,將作者的名和姓分別存放在二個不同的字段中,這樣可以很容易通過姓對數據進行分類查找。另外還要添加一個作者的國籍列,這樣就可以根據顧客的要求查找特定國家作者的相關作品。為了方便起見,最好使用國家代碼,然后在其他備查表中列出國家的全稱。我們盡量保持本指南的簡單性,所以僅把有實用價值的信息列舉出來。