首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL DELETE 刪除語句完全指南:WHERE 條件控制、PHP 實戰與安全最佳實踐

     編輯:MySQL 入門

MySQL DELETE 刪除語句完全指南:WHERE 條件控制、PHP 實戰與安全最佳實踐

DELETE FROM 是資料庫中最具破壞力的指令之一——執行後資料永久消失,無法復原(除非有備份或 Binlog)。本文系統講解語法、條件控制、命令列與 PHP 實戰,並強調防誤刪的關鍵習慣。

核心語法

DELETE FROM table_name [WHERE condition];
  • 無 WHERE 條件:刪除全表所有資料,極度危險!
  • WHERE 條件:精準鎖定需刪除的行,支援所有比較、邏輯、LIKE、IN、子查詢等運算子。
  • 單次語句可刪除多行,回傳影響行數。

命令列實戰:runoob_tbl 表

精準刪除:指定主鍵 ID

mysql> DELETE FROM runoob_tbl WHERE runoob_id = 3;
Query OK, 1 row affected (0.23 sec)

批次刪除:條件匹配多行

mysql> DELETE FROM runoob_tbl WHERE submission_date < '2007-05-01';
Query OK, 2 rows affected (0.15 sec)

危險操作:無 WHERE 全表清空

mysql> DELETE FROM runoob_tbl; -- 刪除所有 3 行資料
Query OK, 3 rows affected (0.05 sec)

PHP 實戰:預處理語句防注入

<?php
$id = (int)($_POST['id'] ?? 0); // 強制轉整數,防注入
if ($id <= 0) die('Invalid ID');

$sql = 'DELETE FROM runoob_tbl WHERE runoob_id = ?';
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 'i', $id);
mysqli_stmt_execute($stmt);

if (mysqli_stmt_affected_rows($stmt) > 0) {
    echo "Deleted successfully\n";
} else {
    echo "No matching record found\n";
}
mysqli_stmt_close($stmt);
?>

安全最佳實踐:防誤刪五大鐵律

  1. 永遠先 SELECT 驗證: 執行 DELETE 前,先跑 SELECT * FROM table WHERE ... 確認將刪除的資料範圍。
  2. 測試環境先行: 先在開發/測試庫驗證 SQL 邏輯,再上生產。
  3. 使用事務包裹: START TRANSACTION; DELETE ...; -- 確認無誤 COMMIT; -- 或 ROLLBACK;
  4. 軟刪除優於硬刪除: 增加 deleted_at DATETIME NULL 或 is_deleted TINYINT DEFAULT 0 欄位,邏輯上標記刪除,物理保留資料,支援撤銷與稽核。
  5. 權限最小化: 應用程式資料庫帳號僅授予必要表的 DELETE 權限,避免 DROP TABLE、TRUNCATE 等高危操作。

DELETE vs TRUNCATE vs DROP 對比

操作 速度 可回滾 觸發 Trigger 重置 AUTO_INCREMENT 適用場景
DELETE慢(逐行)是(事務)是否條件刪除、需觸發器、小批量
TRUNCATE極快(重建表)否否是清空全表、重置自增 ID、測試環境
DROP TABLE極快否否N/A永久移除表結構與資料

常見錯誤排查

  • Error 1175: Safe update mode:Workbench 安全模式禁止無主鍵條件的 UPDATE/DELETE。解決:SET SQL_SAFE_UPDATES=0; 或加主鍵條件。
  • Foreign key constraint fails:被父表引用的行無法直接刪除。解決:先刪子表關聯行、或設定 ON DELETE CASCADE、或暫停外鍵檢查 SET FOREIGN_KEY_CHECKS=0;(謹慎)。

DELETE 雖簡單,卻關係資料生死。養成「先查後刪、事務包裹、軟刪優先」的肌肉記憶,才能在生產環境游刃有餘、萬無一失。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved