萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL DROP TABLE 刪除資料表完整語法與陷阱

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)

刪除 vs 清空 vs 截斷

操作資料結構身分值重置觸發器回滾速度
DELETE可條件刪除保留否觸發可 (事務)慢
TRUNCATE全清保留是不觸發不可 (隱式提交)快
DROP TABLE全失刪除N/A連同刪除不可最快

實務陷阱

  1. 外鍵阻擋:父表被子表參考時 DROP 失敗 → 先 ALTER TABLE child DROP FOREIGN KEY fk_name
  2. 視圖/預存程序相依:需先 DROP VIEW / DROP PROCEDURE 或用 CASCADE (支援的 DB)
  3. 權限殘留:DROP 會移除該表的 GRANT,但角色/用戶保留
  4. 備份優先:生產環境執行前必須備份或快照

批次刪除範例

-- 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 前三思,備份先行,生產環境需變更流程審批。

copyright © 萬盛學電腦網 all rights reserved