UPDATE 是 MySQL 修改表中現有記錄的核心語句。本文系統講解語法結構、條件控制、PHP 調用實戰、多字段更新與安全最佳實踐,適合初學者快速掌握數據修改操作。
UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value;
SET 子句:指定要修改的列與新值,多列用逗號分隔:SET col1=val1, col2=val2。WHERE 子句:**條件過濾,決定更新哪些行**。省略 WHERE 將更新全表所有行,極其危險!UPDATE = update。注意: 老版 mysql_* 函數已棄用,下方使用 mysqli 面向對象風格 演示。
<?php
$mysqli = new mysqli("localhost", "peter", "abc123", "my_db");
if ($mysqli->connect_errno) {
die("Connect failed: " . $mysqli->connect_error);
}
// 更新 Peter Griffin 年齡為 36
$sql = "UPDATE Person SET Age = 36 WHERE FirstName = 'Peter' AND LastName = 'Griffin'";
if ($mysqli->query($sql) === TRUE) {
echo "記錄更新成功,影響行數: " . $mysqli->affected_rows;
} else {
echo "更新失敗: " . $mysqli->error;
}
$mysqli->close();
?>
| FirstName | LastName | Age (更新前) | Age (更新後) |
|---|---|---|---|
| Peter | Griffin | 35 | 36 |
| Glenn | Quagmire | 33 | 33 (未變) |
UPDATE Person
SET Age = 36, City = 'New York', Status = 'Active'
WHERE FirstName = 'Peter' AND LastName = 'Griffin';
-- 年齡 +1
UPDATE Person SET Age = Age + 1 WHERE LastName = 'Griffin';
-- 更新時間戳
UPDATE orders SET updated_at = NOW() WHERE id = 1001;
-- 字符串拼接
UPDATE users SET full_name = CONCAT(first_name, ' ', last_name);
UPDATE products
SET price = CASE
WHEN category = 'electronics' THEN price * 0.9
WHEN category = 'clothing' THEN price * 0.85
ELSE price
END;
$stmt = $mysqli->prepare("UPDATE Person SET Age = ? WHERE FirstName = ? AND LastName = ?");
$stmt->bind_param("iss", $new_age, $first, $last);
$stmt->execute();
$mysqli->begin_transaction();
try {
$mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
}
| 錯誤現象 | 原因 | 修正 |
|---|---|---|
| 全表數據被誤改 | 漏寫 WHERE 條件 | 養成「先寫 SELECT 驗證條件,再改 UPDATE」習慣 |
| 更新 0 行 | WHERE 條件不匹配任何行 | 先執行 SELECT 驗證條件是否命中目標行 |
| 字段值變 NULL | 子查詢返回 NULL 且無默認值 | 用 COALESCE/IFNULL 提供默認值 |
| 死鎖/鎖等待超時 | 大事務長時間持有行鎖 | 縮小事務範圍、分批提交、按主鍵順序更新 |
UPDATE 雖語法簡單,但**條件控制、注入防護、事務一致性**是生產環境核心要求。牢記:永遠先 SELECT 驗證 WHERE 條件,使用預處理語句,關鍵業務包裹事務,即可安全高效完成數據修改。