使用雙重條件插入或更新
考慮一個追蹤多個實體資料的表,由名稱和日期標識。每天都會產生新行,其中包含有限名稱值清單的未來日期。目標是如果新行不存在則插入新行,或者如果存在則更新現有行。
常見的解決方案可能是檢查條件的預存過程,但這是不可行的,因為從另一種語言推送的資料。
解決方案:INSERT ON DUPLICATE KEY UPDATE
MySQL 功能 INSERT ON DUPLICATE KEY UPDATE 為這個問題提供了一個優雅的解決方案。它允許您根據唯一鍵或索引插入新行(如果不存在)或更新現有行(如果存在)。
在這種情況下,(name,日期)就足夠了。當嘗試插入時,MySQL 將偵測到由於該唯一鍵而導致的衝突,並執行更新。
範例:
CREATE TABLE myThing ( id INT AUTO_INCREMENT PRIMARY KEY, name INT NOT NULL, values1 INT NOT NULL, values2 INT NOT NULL, dates DATE NOT NULL, UNIQUE KEY (name, dates) ); INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
透過執行多次插入相同的(名稱,日期)值,您可以更新values2列相應地:
INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1; INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
結果:
SELECT * FROM myThing; +----+------+---------+---------+------------+ | id | name | values1 | values2 | dates | +----+------+---------+---------+------------+ | 1 | 777 | 1 | 3 | 2015-07-11 | +----+------+---------+---------+------------+
如您所見,INSERT ON DUPLICATE KEY UPDATE 子句有效地更新了現有行的values2 欄位。
以上是MySQL中如何基於組合鍵高效插入或更新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!