Like Share Discussion Bookmark Smile

J.J. Huang   2020-07-16   MySQL   瀏覽次數:次   DMCA.com Protection Status

MySQL - 第二十五章 | 建立表(下)

更新表

為更新表定義,可使用ALTER TABLE語句。但是,理想狀態下,當表中存儲資料以後,該表就不應該再被更新。在表的設計過程中需要花費大量時間來考慮,以便後期不對該表進行大的改動。

為了使用ALTER TABLE更改表結構,必須給出下面的訊息:

  • 在ALTER TABLE之後給出要更改的表名(該表必須存在,否則將出錯);
  • 所做更改的列表。
1
ALTER TABLE vendors ADD vend_phone CHAR(20);

分析:這條語句給vendors表增加一個名為vend_phone的列,必須明確其資料類型。

刪除剛剛添加的列,可以這樣做:

1
ALTER TABLE vendors DROP COLUMN vend_phone;

ALTER TABLE的一種常見用途是定義外鍵。

1
2
3
4
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num);
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id) REFERENCES products (prod_id);
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id);
ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id);

由於要更改4個不同的表,使用了4條ALTER TABLE語句。為了對單個表進行多個更改,可以使用單條ALTER TABLE語句,每個更改用逗號分隔。

複雜的表結構更改一般需要手動刪除過程,它涉及以下步驟:

  • 用新的列佈局建立一個新表;
  • 使用INSERT SELECT語句從舊表複製資料到新表。如果有必要,可使用轉換函數和計算欄位;
  • 檢驗包含所需資料的新表;
  • 重命名舊表(如果確定,可以刪除它);
  • 用舊表原來的名字重命名新表;
  • 根據需要,重新建立觸發器、存儲過程、索引和外鍵。

注意:小心使用ALTER TABLE 使用ALTER TABLE要極為小心,應該在進行改動前做一個完整的備份(模式和資料的備份)。資料庫表的更改不能撤銷,如果增加了不需要的列,可能不能刪除它們。類似地,如果刪除了不應該刪除的列,可能會丟失該列中的所有資料。

刪除表

刪除表(刪除整個表而不是其內容)非常簡單,使用DROP TABLE語句即可。

1
DROP TABLE customers2;

分析:這條語句刪除customers2表(假設它存在)。刪除表沒有確認,也不能撤銷,執行這條語句將永久刪除該表。

重命名表

使用RENAME TABLE語句可以重命名一個表。

1
RENAME TABLE customers2 TO customers;

分析:RENAME TABLE所做的僅是重命名一個表。

可以使用下面的語 句對多個表重命名:

1
2
3
RENAME TABLE backup_customers TO customers,
backup_vendors TO vendors,
backup_products TO products;

結語

新增欄位應該是最常見的需求,因為功能上的新增或是異動,常常會需要加入新的欄位,當表的資料很多時,新增欄位會需要耗費較長的時間,這需要特別注意。

而移除欄位,這是最為麻煩的,通常的做法會是使用新增表的方式去做移除欄位,基本步驟如上方所述。當然是希望可以不要更動就不要更動,但是⋯⋯這是不可能的,哈。

註:以上參考了
MySQL必知必会 MySQL Crash Course