在 MySQL 中建立 table (小進階)
上次我們學會如何建立資料庫與資料表並插入一些資料,這次將更深入了解資料表如何操作。
規劃資料架構的基本要素
在建立 table 前建議先規劃這些;
- 資料庫有幾個資料表、分別要叫什麼名字
- 每個資料表要有多少欄位和欄位的名稱
- 每個欄位要儲存什麼型態的資料
資料庫操作 Lv. 1.5
刪除資料庫
- 指令:
DROP DATABASE <database>
- 注意事項:我將會以電腦周邊當作要儲存的資料
1
2
3
4
5
MySQL[(none)]> CREATE DATABASE computers;
Query OK, 1 row affected (0.03 sec)
MySQL[(none)]> DROP DATABASE computers;
Query OK, 0 rows affected (0.01 sec)
資料表操作 Lv 1 - 建立 table
首先創立一個資料表,我將會一一解釋其中內容。
1
2
3
4
5
6
7
8
9
MySQL[computers]> CREATE TABLE objects (
-> object_id INT AUTO_INCREMENT,
-> type INT,
-> brand VARCHAR(20),
-> model VARCHAR(20) UNIQUE,
-> description TEXT,
-> PRIMARY KEY (object_id)
-> );
Query OK, 0 rows affected (0.03 sec)
使用 DESCRIBE <table>
來查看 table:
1
2
3
4
5
6
7
8
9
10
11
MySQL[computers]> DESCRIBE objects;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| object_id | int | NO | PRI | NULL | auto_increment |
| type | int | YES | | NULL | |
| brand | varchar(20) | YES | | NULL | |
| model | varchar(20) | YES | UNI | NULL | |
| description | text | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
Object_id
object_id
將作為主要鍵值欄位,所以有關鍵字 PRIMARY KEY
。
我想就是之後要搜尋特定物品時將使用這個 id 做連結的意思吧。
而 AUTO_INCREMENT
則是代表這個區塊的值要自動遞增,預設起始值為1。
可以在這裡看 W3School 的 PRIMARY KEY 教學
type
這裡將儲存此物品的種類,如螢幕、鍵盤、滑鼠等,以 INT 表示,方便輸入也預防打錯。
brand
這將儲存品牌的名字。
VARCHAR 和 CHAR 不同的地方是,當使用 CHAR(10) 只有輸入 hi 兩個字時,CHAR 將會自動補上8個字來填滿設定的 CHAR(10)。
但 VARCHAR 將不會以空格填滿,而是只使用2個字的空間(2 bytes)來儲存資料。
另外還有 NCHAR 和 NVARCHAR,他們將以 unicode 編碼,每個字元占用2 bytes,雖花了更多空間,但如此便能儲存中文、日文、韓文等非英文資料。
model
將儲存該物品的型號。
UNIQUE
將會確保該欄的每一個值都不會重複,而前面提過的 PRIMARY KEY
自帶 UNIQUE 的屬性。
description
將填寫物品的詳細資料,使用 TEXT
就不怕字數上限的問題,他的行為就好像 C++ 中的 string 一樣,會隨著使用者輸入的資料長度變化它所需的儲存空間。
DESCRIPTION <table>
- 在使用
DESCRIPTION <table>
後,第三欄(Null)表示是否允許值為NULL。 - 第四欄(key)將會顯示該欄位是否有索引存在,將以簡寫表示,如:
PRI
是PRIMARY KEY
UNI
是UNIQUE
- 第五欄(Default) 表示該欄是否有預設資料值,但我們在建立時沒有指定預設資料所以這裡為 NULL。
- 最後一欄(Extra)會記錄欄位的額外資訊。
資料表操作 Lv. 1.2 - 修改 table
雖然前面有提到我們應該要設計好 table 再來建立,但 MySQL 仍有一些方法可以修正打錯的資料。
小提示,要修改就要趁早,不然 data 輸入後再修改可能會造成很多麻煩。
增加一個欄位
- 指令:
ALTER TABLE <table> ADD <column_name> <data_type>
- 注意事項:將會新增為最後一個欄位
1
2
3
4
MySQL[computers]> ALTER TABLE objects
-> ADD color VARCHAR(10);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
刪除一個欄位
- 指令:
ALTER TABLE <table> DROP <column_name>
- 注意事項:無
1
2
3
4
MySQL[computers]> ALTER TABLE objects
-> DROP color;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改欄位的資料型態
- 指令:
ALTER TABLE <table> MODIFY <column_name> <data_type>
- 注意事項:只能修改資料型態,不能修改欄位名。
1
2
3
4
MySQL[computers]> ALTER TABLE objects
-> MODIFY color INT;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
其他修改方式
可以使用 DROP 指令
刪除整個資料庫,再使用 CREATE 指令
來重新建立一次資料庫,以修改打錯的名字或多筆資料。
而途中可以使用方向鍵上鍵來快速輸入以前輸入的資料。
恭喜完成
這篇比較短,只建立好一個 table,下篇就來插入資料囉
Reference
本篇內容皆來自 MySQL 與 MariaDB 學習手冊 與 W3School