MySQL 支援跨表單一 DELETE 陳述式刪除多張表資料,語法分為 DELETE t1, t2 FROM ... 與 DELETE FROM t1, t2 USING ... 兩種風格。本文詳細說明語法、執行順序、限制與最佳實務。
DELETE t1, t2
FROM t1
INNER JOIN t2 ON t1.id = t2.id
INNER JOIN t3 ON t2.id = t3.id
WHERE t1.status = 'deleted';
DELETE 後列出要刪除的表別名(t1, t2),FROM 後接完整 JOIN 查詢。DELETE 後的表會被刪除,t3 僅供條件過濾。DELETE FROM t1, t2
USING t1
INNER JOIN t2 ON t1.id = t2.id
INNER JOIN t3 ON t2.id = t3.id
WHERE t1.status = 'deleted';
USING 子句寫 JOIN 關係,DELETE FROM 列出目標表。DELETE FROM somelog
WHERE user = 'jcole'
ORDER BY timestamp
LIMIT 1;
timestamp 升冪刪除最舊一筆,適用佇列清理、日誌輪轉。LIMIT 1000 迴圈),減少鎖衝突與 Binlog 膨脹。SELECT 驗證將刪除資料:SELECT t1.*, t2.* FROM t1 JOIN t2 ... WHERE ...ON DELETE CASCADE)可自動級聯刪除,但需謹慎設計。deleted_at 欄位,查詢時過濾。DROP PARTITION 秒級清理歷史資料。