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

MySQL UPDATE 更新語句完全指南:多欄位更新、WHERE 條件鎖定與 PHP 安全實戰

     編輯:MySQL 入門

MySQL UPDATE 更新語句完全指南:多欄位更新、WHERE 條件鎖定與 PHP 安全實戰

UPDATE 是資料庫寫入操作的核心:修正錯誤資料、更新業務狀態、累加計數器……但稍有不慎(如漏寫 WHERE),就會導致全表資料被錯誤覆寫。本文系統講解語法、多欄位更新、命令列與 PHP 實戰,並分享防誤更新的實戰鐵律。

核心語法

UPDATE table_name
SET field1 = new_value1, field2 = new_value2, ...
[WHERE condition];
  • SET 子句:可同時更新一或多個欄位,用逗號分隔。
  • WHERE 子句:必加!鎖定需更新的行。缺少 WHERE 將更新全表所有行。
  • 支援子查詢、運算式、函數呼叫(如 SET count = count + 1)。

命令列實戰:runoob_tbl 表

單欄位精準更新

mysql> UPDATE runoob_tbl
    -> SET runoob_title = 'Learning JAVA'
    -> WHERE runoob_id = 3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

多欄位同步更新

mysql> UPDATE runoob_tbl
    -> SET runoob_title = 'Advanced MySQL',
    ->     submission_date = '2024-01-15'
    -> WHERE runoob_author = 'John Poul';

運算式更新:計數器遞增

mysql> UPDATE runoob_tbl
    -> SET view_count = view_count + 1
    -> WHERE runoob_id = 1;

危險操作:無 WHERE 全表更新

mysql> UPDATE runoob_tbl SET runoob_title = 'Oops'; -- 所有行標題變成 'Oops'
Query OK, 3 rows affected (0.02 sec)

PHP 實戰:預處理 + 輸入驗證

<?php
$id = (int)($_POST['id'] ?? 0);
$title = trim($_POST['title'] ?? '');

if ($id <= 0 || $title === '') {
    die('Invalid input');
}

$sql = 'UPDATE runoob_tbl SET runoob_title = ? WHERE runoob_id = ?';
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 'si', $title, $id);
mysqli_stmt_execute($stmt);

if (mysqli_stmt_affected_rows($stmt) > 0) {
    echo "Updated successfully\n";
} else {
    echo "No matching record or data unchanged\n";
}
mysqli_stmt_close($stmt);
?>

防誤更新五大鐵律(與 DELETE 同源同宗)

  1. 永遠先 SELECT 驗證: SELECT * FROM table WHERE ... 確認影響範圍。
  2. 測試環境先行: 先在開發庫跑通邏輯。
  3. 事務包裹關鍵更新: START TRANSACTION; UPDATE ...; SELECT ... 驗證; COMMIT/ROLLBACK;
  4. 主鍵或唯一鍵作為 WHERE 條件: 避免模糊條件導致誤傷無關行。
  5. 審計日誌: 重要表建議加 updated_at、updated_by 欄位,或啟用 Binlog/審計插件追蹤變更。

UPDATE vs REPLACE vs INSERT ... ON DUPLICATE KEY UPDATE

語句 行為 適用場景
UPDATE修改現有行已知主鍵/唯一鍵,精準更新指定欄位
REPLACE INTO刪除舊行 + 插入新行(主鍵衝突時)需全量覆蓋、且不在乎自增 ID 變化
INSERT ... ON DUPLICATE KEY UPDATE衝突時更新指定欄位,保留主鍵Upsert(不存在插入、存在更新)、保持自增 ID 穩定

效能優化提示

  • WHERE 條件走索引: 更新條件欄位建立索引,避免全表掃描鎖表。
  • 批次更新分批提交: 萬行以上更新,建議每 500-1000 行提交一次事務,減少鎖持有時間、降低主從延遲。
  • 避免更新索引欄位: 修改索引列會導致索引樹重建,影響寫入效能。

UPDATE 是業務邏輯落地的關鍵一筆。嚴守「先查後改、事務保護、主鍵鎖定、分批提交」,讓每一次寫入都精準可控、有據可查。

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