UPDATE 基礎語法
UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value
- WHERE 同樣至關重要: 缺失將更新全表所有行。
- 多欄位更新: `SET col1=val1, col2=val2, ...`
- 多條件組合: `WHERE condition1 AND condition2`
PHP 完整範例
$con = mysql_connect("localhost", "peter", "abc123");
if (!$con) die('Could not connect: ' . mysql_error());
mysql_select_db("my_db", $con);
// 將 Peter Griffin 年齡更新為 36
$sql = "UPDATE Person SET Age = '36'
WHERE FirstName = 'Peter' AND LastName = 'Griffin'";
mysql_query($sql, $con);
mysql_close($con);
核心避坑指南
| 風險場景 | 後果 | 防範措施 |
| 忘寫 WHERE | 全表數據被覆蓋 | 強制習慣:先寫 WHERE 再寫 SET |
| 字符串未加引號 | 語法錯誤或誤更新 | 數值型不加引號,字符/日期型必須加單引號 |
| 大量更新鎖表 | 業務阻塞、主從延遲 | 分批更新、低峰期執行、pt-online-schema-change |
| 子查詢性能差 | 執行極慢 | 改用 JOIN 更新或應用層分步處理 |
多表更新語法(MySQL 特有)
-- 內連接更新
UPDATE table1 t1
INNER JOIN table2 t2 ON t1.id = t2.t1_id
SET t1.col = t2.col
WHERE t1.status = 1;
-- 逗號語法(舊風格,不推薦)
UPDATE table1 t1, table2 t2
SET t1.col = t2.col
WHERE t1.id = t2.t1_id;
遷移至 mysqli/PDO 預處理
$stmt = $pdo->prepare("UPDATE Person SET Age = ? WHERE FirstName = ? AND LastName = ?");
$stmt->execute([36, 'Peter', 'Griffin']);
echo "影響行數: " . $stmt->rowCount();