DROP TABLE 是永久刪除資料表結構與資料的 DDL 指令,操作不可逆。本文涵蓋基本語法、條件刪除、多表刪除、外鍵約束處理、權限與恢復策略,提供生產環境安全操作規範。
| 操作 | 語法 | 說明 |
|---|---|---|
| 刪除單表 | DROP TABLE table_name; | 表不存在報錯 |
| 安全刪除 | DROP TABLE IF EXISTS table_name; | 不存在不報錯,腳本必備 |
| 同時刪多表 | DROP TABLE t1, t2, t3; | 原子操作,任一失敗全回滾 |
| 刪除臨時表 | DROP TEMPORARY TABLE IF EXISTS tmp_table; | 僅刪除當前會話臨時表 |
-- 1. 建立測試表
CREATE TABLE Employee (
id INT, first_name VARCHAR(15), last_name VARCHAR(15),
start_date DATE, end_date DATE, salary FLOAT(8,2),
city VARCHAR(10), description VARCHAR(15)
);
-- 2. 確認表存在
SHOW TABLES;
-- +----------------+
-- | Tables_in_test |
-- +----------------+
-- | employee |
-- +----------------+
-- 3. 刪除表
DROP TABLE employee;
-- Query OK, 0 rows affected (0.01 sec)
-- 4. 再次確認
SHOW TABLES;
-- Empty set (0.00 sec)
若表被其他表外鍵引用,直接 DROP TABLE 會報錯:
ERROR 3730 (HY000): Cannot drop table 'parent' referenced by a foreign key constraint 'fk_child_parent' on table 'child'.
ALTER TABLE child DROP FOREIGN KEY fk_child_parent;
DROP TABLE child;
DROP TABLE parent;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE parent, child;
SET FOREIGN_KEY_CHECKS = 1;
⚠️ 僅限清楚資料關聯、確認無資料完整性風險時使用。
| 特性 | DROP TABLE | TRUNCATE TABLE | DELETE FROM |
|---|---|---|---|
| 操作類型 | DDL | DDL | DML |
| 刪除內容 | 表結構+資料+索引+觸發器+權限 | 所有資料,保留結構 | 符合條件的資料 |
| 可回滾 | 否 | 否 | 是(在交易中) |
| 觸發器 | 不觸發 | 不觸發 | 觸發 |
| 自增計數器 | 重置 | 重置 | 不重置 |
| 速度 | 最快 | 極快 | 較慢(逐行) |
| 空間釋放 | 完全釋放 | 釋放(InnoDB 5.7+) | 不釋放(標記刪除) |
mysqldump -u root -p db_name table_name > backup.sqlSHOW TABLES;、SELECT COUNT(*) FROM table_name; 核對。DROP TABLE IF EXISTS ...IF EXISTS 或先 SHOW TABLES; 確認。DROP TABLE 是最高權限的刪除操作,**一旦執行無法透過 ROLLBACK 恢復**。務必遵循「備份→確認→執行→驗證」流程,善用 IF EXISTS、外鍵檢查控制、維護窗口機制,將風險降至最低。記住:資料無價,操作謹慎。