課程 21:資料表結構修改 (ALTER TABLE)
學會使用 SQL ALTER TABLE 修改資料表結構,包含新增、刪除、修改欄位與注意事項,並透過互動模擬練習強化理解。
一、什麼是 ALTER TABLE?
ALTER TABLE
語句用於修改現有資料表的結構。- 您可以使用它來新增、刪除或修改資料表中的欄位。
- 也可以用來設定或移除約束(Constraints),如主鍵、外鍵、唯一約束等。
二、SQL常見的 ALTER TABLE 操作
- 新增欄位:
ADD COLUMN
- 刪除欄位:
DROP COLUMN
- 修改欄位定義 (型別/大小等):
MODIFY COLUMN
(MySQL) 或ALTER COLUMN
(PostgreSQL, SQL Server) - 重新命名欄位:
RENAME COLUMN
(PostgreSQL) 或CHANGE COLUMN
(MySQL)
三、SQL新增欄位範例
假設我們想在 customers
表中新增一個 \’email\’ 欄位,資料型別為 VARCHAR(255)。
ALTER TABLE customers\nADD COLUMN email VARCHAR(255);\n
四、SQL刪除欄位範例
假設我們想從 products
表中刪除 \’stock\’ 欄位。
ALTER TABLE products\nDROP COLUMN stock;\n
五、SQL修改欄位定義範例
假設我們想將 products
表的 \’price\’ 欄位資料型別從 INTEGER 改為 DECIMAL(10, 2)。
-- MySQL 語法
ALTER TABLE products
MODIFY COLUMN price DECIMAL(10, 2);
-- PostgreSQL/SQL Server 語法
ALTER TABLE products
ALTER COLUMN price TYPE DECIMAL(10, 2);
六、注意事項與風險
- 資料丟失風險:刪除欄位會永久刪除該欄位的所有數據,請務必小心。修改資料型別也可能導致資料截斷或格式錯誤。
- 鎖定表格:大型表格的結構修改操作可能會鎖定表格較長時間,影響應用程式的可用性。應在離峰時段進行或考慮使用線上模式修改工具。
- 回滾困難:某些結構修改操作可能難以或無法回滾。在執行前務必備份資料。
- 依賴關係:如果修改或刪除的欄位被視圖 (View)、存儲過程 (Stored Procedure)、觸發器 (Trigger) 或其他對象引用,操作可能會失敗。
七、課後小練習
- 假設有一個
orders
表 (order_id, customer_id, amount),請寫出一個查詢,為這個表格新增一個 \’order_date\’ 欄位,資料型別為 DATE。 - 假設有一個
employees
表 (id, name, hire_date),請寫出一個查詢,將 \’hire_date\’ 欄位的資料型別改為 DATETIME (請使用您熟悉的資料庫語法)。
互動練習:ALTER TABLE 新增欄位模擬
產品資料表(products)初始結構
id | name | price |
---|---|---|
1 | 筆記本 | 25000 |
2 | 鍵盤 | 1500 |
3 | 滑鼠 | 800 |