首頁 >資料庫 >mysql教程 >如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 進行多行插入和更新?

如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 進行多行插入和更新?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-11 07:06:45454瀏覽

How Can I Use MySQL's ON DUPLICATE KEY UPDATE for Multiple Row Inserts and Updates?

使用 ON DUPLICATE KEY UPDATE

在 MySQL 中高效插入和更新多行

MySQL 的 ON DUPLICATE KEY UPDATE 子句提供了一種簡化的方法,用於在單一查詢中對多行執行插入和更新操作。 這在處理唯一鍵、防止錯誤和確保資料一致性時特別有用。

場景:

考慮這樣一個場景:您需要在表中插入多行,但由於重複的唯一鍵值,某些行可能已經存在。 您希望使用新資料更新現有行,而不是產生錯誤。

範例:

假設您有以下 SQL 語句,旨在將多行插入名為 beautiful 的表中:

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29);</code>

如果name是唯一鍵並且某些名稱已經存在,則此查詢將失敗。 為了解決這個問題,我們使用 ON DUPLICATE KEY UPDATE.

解:

ON DUPLICATE KEY UPDATE 子句附加到您的 INSERT 語句中:

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>

此修改後的查詢將插入 name 唯一的新行。 如果遇到重複的 name,則僅 age 欄位將更新為 VALUES 子句中提供的值。

現代語法(MySQL 8.0.19 及更高版本):

MySQL 8.0.19 及更高版本提供了使用別名的更具可讀性的方法:

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) AS new ON DUPLICATE KEY UPDATE age = new.age;</code>

這裡,AS new 為新行指派一個別名,讓您清楚地引用其欄位(例如,new.age)。

舊語法(8.0.19 之前的 MySQL 版本):

對於較舊的 MySQL 版本,VALUES 關鍵字用於引用要插入的值:

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>

透過使用ON DUPLICATE KEY UPDATE,您可以在單一 SQL 語句中有效管理插入和更新,從而簡化程式碼並提高資料庫效能。

以上是如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 進行多行插入和更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn