ON DUPLICATE KEY UPDATE
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中文網其他相關文章!