HOWTO · MySQL

在 MySQL 中使用一個查詢更新多個表

本文介紹如何在 MySQL 中一次查詢更新多個表。

本頁內容

在某些情況下,使用者想要同時更新邏輯相關的表。這些邏輯相關的表通過一些屬性相互連結。

MySQL 一次查詢更新多張表的優點

表中的類似屬性用於建立更新查詢。更新查詢根據條件在不同的表中執行多行更新。

當出現類似情況時,適合多個表更新查詢。使用這種多表更新查詢的好處是:

  1. 這會導致一次更新行,而不是在每個表中進行單獨更新。
  2. 這也減少了更新不同表中條目的總時間。
  3. 這減少了表中不一致更新的機會。
  4. 在任何給定時間,所有表格的類似響應。

在 MySQL 中使用 UPDATE 關鍵字通過一個查詢更新多個表

在多表更新查詢中,每條滿足條件的記錄都會被更新。即使條件匹配多次,該行也只會更新一次。

更新多個表的語法不能與 ORDER BY 和 LIMIT 關鍵字一起使用。

UPDATE 關鍵字的語法:

UPDATE table1, table2, ...
    SET column1 = value1,
        column2 = value2,
        ...
[WHERE conditions]

多重更新不是 MySQL 語言中存在的組合關鍵字。語法是由有助於對兩個或多個表進行分組的各種關鍵字的組合形成的,例如 join 關鍵字。

連線型別用於進行單個查詢以一次更新多個表。讓我們通過一次更新多個表來理解這一點。

考慮兩個名為 library 和 stu_book 的表。並考慮一本書從圖書館發給學生的情況。

圖書館的圖書數量減少了,而有學生的圖書數量增加了。這就是需要兩個單獨呼叫的場景。

為了避免 RDBMS 表中的單獨更新,我們使用單個查詢更新兩個表中的行。以下是更新呼叫之前要執行的語句列表。

在對錶進行實際查詢之前的查詢列表:

  • 建立兩個名為 library 和 stu_book 的實體。
  • 兩者的架構共享如下:

    library 和 stu_book 表模式

  • 分別在表格中插入一些常用值,如下所示。

    插入表中的記錄以展示方案

  • 嘗試通過在兩個表中同時增加或減少來實現用例。

    使用單個查詢一次在兩個表中進行多個更新

查詢執行 MySQL 語句:

UPDATE library l, stu_book s
    SET l.book_count = l.book_count - 2,
        s.book_count = s.book_count + 2
WHERE l.id = s.book_id;

在上面的查詢中,在內部,inner join 合併了兩個表,並在檢查表的約束後對合並的表進行操作。當沒有指定關鍵字時,將應用內部聯接。

像外連線這樣的連線,右外連線,使用者應該使用正確的關鍵字。只有在分組的兩個表具有相似/匹配屬性的情況下才能執行聯接。

SET 關鍵字與 UPDATE 關鍵字一起用於在現有行中設定新值。它通過在舊值上寫入新資料來覆蓋舊值。

這裡 set 更新了 stu_book 表的書籍數量,並且相同數量的數量從 library 書籍數量中減少。

兩個表的所有行的計數都不會更新。相反,限制由 WHERE 關鍵字保留。

WHERE 關鍵字對行進行實際過濾。關鍵字在檢查表中的條件後過濾行。

在這裡,這個關鍵字表示 library_id 應該與 stu_book 表的 book_id 匹配。

輸出將列出兩個表中受影響的總行數的結果。下面是確認受影響的行數的輸出。

Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

以下是上述查詢在本地執行環境或命令提示符下的最終輸出。

本地執行截圖:

觸發更新後的輸出