DROP TABLE 永久移除資料表結構、資料、索引、觸發器、權限、約束,**不可回覆**。必須區別於 DELETE (刪資料保留結構) 與 TRUNCATE (清空資料保留結構)。
DROP TABLE [IF EXISTS] table_name [, table_name2 ...]
[RESTRICT | CASCADE];
IF EXISTS:避免不存在報錯 (MySQL/PostgreSQL/SQLite 支援,SQL Server 2016+ 支援)RESTRICT (預設):有外鍵參考時拋錯CASCADE:連同參考的外鍵一併刪除 (PostgreSQL/Oracle 支援,MySQL 需手動先刪 FK)| 操作 | 資料 | 結構 | 身分值重置 | 觸發器 | 回滾 | 速度 |
|---|---|---|---|---|---|---|
| DELETE | 可條件刪除 | 保留 | 否 | 觸發 | 可 (事務) | 慢 |
| TRUNCATE | 全清 | 保留 | 是 | 不觸發 | 不可 (隱式提交) | 快 |
| DROP TABLE | 全失 | 刪除 | N/A | 連同刪除 | 不可 | 最快 |
DROP 失敗 → 先 ALTER TABLE child DROP FOREIGN KEY fk_nameDROP VIEW / DROP PROCEDURE 或用 CASCADE (支援的 DB)DROP 會移除該表的 GRANT,但角色/用戶保留-- MySQL: 刪除前綴為 tmp_ 的所有表
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(TABLE_NAME), ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME LIKE 'tmp_%'
INTO @sql;
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SELECT A1.store_name AS Store, SUM(Sales) AS "Total Sales"
FROM Store_Information A1
GROUP BY A1.store_name;
鐵律:DROP TABLE 前三思,備份先行,生產環境需變更流程審批。