21.1 創建表
創建表的方式有兩種,
1. 使用交互式創建和管理表的工具;
2. 表也可以直接使用MySQL語句操縱。
21.1.1 表創建基礎
使用CREATE TABLE
,必須給出如下信息,
1. 在CREATE TABLE
之後,給出新表的名稱;
2. 表列的名字和定義,用逗號分隔;
3. 表的主鍵PRIMARY KEY
可以在創建表時給出;
4. 最終給出使用的數據庫類型。
CREATE TABLE customers
(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
PRIMARY KEY (cust_id)
) ENGINE=InnoDB;
分析,當創建新表時,若已經存在表,需要先刪除,否則會報錯。當表不存在時創建它,需要使用IF NOT EXISTS
。
21.1.2 使用NULL
值
- 若創建表時,不允許
NULL
值的列。如果強行插入,會報錯,且插入失敗。
- 不要把
NULL
值和空串(兩個單引號,中間沒有字符''
)混淆。空串是個有效值。
- 不要把
21.1.3 主鍵再介紹
CREATE TABLE orderitems
(
order_num int NOT NULL,
order_item int NOT NULL,
prod_id char(10) NOT NULL,
quantity int NOT NULL,
item_price decimal(8, 2) NOT NULL,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB
21.1.4 使用AUTO_INCREMENT
- 簡要說明下需要注意的地方,
- 覆蓋
AUTO_INCREMENT
。如果一個列被指定爲AUTO_INCREMENT
,當想要使用特殊值,只需要賦值一個唯一值即可,後續的增量開始於手工值。 - 可以使用
last_insert_id
來獲取AUTO_INCREMENT
的增量值。SELECT last_insert_id
- 覆蓋
21.1.5 指定默認值
使用默認值,需要使用DEFAULT
關鍵字
- 與大多數的DBMS不同,MySQL不允許使用函數作爲默認值
21.1.6 引擎類型
MySQL打包了多個引擎。由於各自的功能和特性,爲不同的認爲選擇正確的引擎獲取良好的功能和靈活性。
1. InnoDB是一個可靠的事務處理引擎,不支持全文檢索;
2. MEMORY在功能上等同於MyIASM,但數據存儲在內存,速度很快,適合臨時表;
3. MyISAM是一個性能極高的引擎,支持全文檢索。
- 引擎可以混用,但是外鍵不能跨引擎。一個引擎的表不能引用具有使用不同引擎的表的外鍵。
21.2 更新表
ALTER TABLE
語句,但理想狀況下,不期望做更新表的動作,都在創建前進行考慮。爲使用ALTER TABLE
更改表結果,必須提高一下信息,
1. 在ALTER TABLE
之後給出表名稱;
2. 所做更改的列表。
如下,添加和刪除列,
ALTER TABLE vendors
ADD vend_phone CHAR(20);
ALTER TABLE vendors
DROP COLUMN vend_phone;
複製的表結果更改,需要進行手動刪除操作,
1. 用新的列布局創建一個新表;
2. 使用INSERT SELECT
語句從舊錶中複製數據。如有必要,使用轉換函數和計算字段;
3. 檢驗包含數據的新表;
4. 重命名舊錶;
5. 用舊錶的名稱重命名新表;
6. 根據需要,重新創建觸發器、存儲過程、索引和外鍵。
21.3 刪除表
DROP TABLE
語句
DROP TABLE customer32
- 注意,沒有撤銷操作
21.4 重命名錶
RENAME TABLE
語句