DELETE FROM table_name WHERE condition
關鍵提醒: WHERE 子句決定刪除哪些記錄。若省略 WHERE,所有資料將被刪除!
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('連線失敗: ' . $mysqli->connect_error);
}
$sql = "DELETE FROM Persons WHERE LastName = 'Griffin'";
if ($mysqli->query($sql) === TRUE) {
echo "刪除成功,影響行數: " . $mysqli->affected_rows;
} else {
echo "錯誤: " . $mysqli->error;
}
$mysqli->close();
?>
<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
if (!$conn) {
die('連線失敗: ' . mysqli_connect_error());
}
$sql = "DELETE FROM Persons WHERE LastName = 'Griffin'";
if (mysqli_query($conn, $sql)) {
echo "刪除成功,影響行數: " . mysqli_affected_rows($conn);
} else {
echo "錯誤: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM Persons WHERE LastName = :name";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':name', 'Griffin');
$stmt->execute();
echo "刪除成功,影響行數: " . $stmt->rowCount();
} catch (PDOException $e) {
echo "錯誤: " . $e->getMessage();
}
?>
prepare) 防止 SQL 注入。deleted_at 欄位) 而非真正刪除,保留稽核軌跡。LIMIT),避免長時間鎖表影響效能。ON DELETE CASCADE/SET NULL/RESTRICT 維護參考完整性。| 現象 | 可能原因 | 解決 |
|---|---|---|
| affected_rows 為 0 | WHERE 條件不匹配任何列 | 檢查條件值、大小寫、資料型別 |
| Foreign key constraint fails | 被刪除列有子表引用 | 先刪除子表資料、或設定 CASCADE、或軟刪除 |
| Lock wait timeout | 大量刪除鎖定過久 | 分批刪除、優化索引、縮短事務 |