DELETE FROM 是 MySQL 移除表中記錄的核心語句。本文系統講解語法結構、條件控制、PHP 調用實戰、TRUNCATE 對比、事務回滾與安全刪除最佳實踐,助你精準高效清理數據。
DELETE FROM table_name
WHERE column_name = some_value;
WHERE 子句:**條件過濾,決定刪除哪些行**。省略 WHERE 將刪除全表所有行,不可逆!DELETE FROM = delete from。<?php
$mysqli = new mysqli("localhost", "peter", "abc123", "my_db");
if ($mysqli->connect_errno) {
die("Connect failed: " . $mysqli->connect_error);
}
// 刪除姓 Griffin 的所有記錄
$sql = "DELETE FROM Person WHERE LastName = 'Griffin'";
if ($mysqli->query($sql) === TRUE) {
echo "刪除成功,影響行數: " . $mysqli->affected_rows;
} else {
echo "刪除失敗: " . $mysqli->error;
}
$mysqli->close();
?>
| FirstName | LastName | Age (刪除前) | 刪除後 |
|---|---|---|---|
| Peter | Griffin | 35 | 已刪除 |
| Glenn | Quagmire | 33 | 保留 |
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 語法類型 | DML (數據操作語言) | DDL (數據定義語言) |
| WHERE 條件 | 支援 | 不支援(只能全表) |
| 觸發器 | 觸發 BEFORE/AFTER DELETE | 不觸發 |
| 自增計數器 | 保留 | 重置為 1 |
| 事務支援 | 支援(可回滾) | 隱式提交,不可回滾 |
| 鎖粒度 | 行鎖 | 表鎖 |
| 速度 | 較慢(逐行刪除、記錄日誌) | 極快(釋放數據頁、重建表) |
| 適用場景 | 條件刪除、需觸發器、需回滾 | 全表清空、重置自增 ID、大表快速清理 |
-- 步驟 1:驗證條件命中行
SELECT * FROM Person WHERE LastName = 'Griffin';
-- 確認無誤後
-- 步驟 2:執行刪除
DELETE FROM Person WHERE LastName = 'Griffin';
$mysqli->begin_transaction();
try {
$mysqli->query("DELETE FROM order_items WHERE order_id = 1001");
$mysqli->query("DELETE FROM orders WHERE id = 1001");
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
}
在表中增加 deleted_at DATETIME NULL 或 is_deleted TINYINT DEFAULT 0 字段:
-- 邏輯刪除
UPDATE Person SET is_deleted = 1, deleted_at = NOW() WHERE id = 123;
-- 查詢時自動過濾
SELECT * FROM Person WHERE is_deleted = 0;
優點:數據可恢復、審計追蹤、避免外鍵約束衝突。
-- 每次刪 1000 行,循環直到 affected_rows = 0
DELETE FROM huge_table
WHERE create_time < '2020-01-01'
LIMIT 1000;
配合 affected_rows 判斷循環終止,可在應用層或存儲過程中實現。
| 錯誤 | 後果 | 預防 |
|---|---|---|
| 漏寫 WHERE | 全表清空,數據永久丟失 | 代碼審查強制檢查、生產環境只讀賬號 |
| 條件寬泛誤刪關鍵數據 | 業務故障、需從備份恢復 | 先 SELECT 確認、軟刪除模式 |
| 外鍵約束報錯 | 刪除失敗、事務回滾 | 先刪子表、或設置 ON DELETE CASCADE |
| 大事務導致主從延遲 | 從庫同步延遲數小時 | 分批刪除、低峰期執行 |
DELETE 是精準刪除利器,TRUNCATE 是全表清空神器。**安全刪除三部曲:驗證條件 → 包裹事務 → 考慮軟刪除**。掌握分批刪除與外鍵處理,即可從容應對從單行清理到 TB 級大表歸檔的各類場景。