首頁 > 資料庫 > mysql教程 > MySQL中如何基於組合鍵高效插入或更新行?

MySQL中如何基於組合鍵高效插入或更新行?

Patricia Arquette
發布: 2024-12-29 18:36:11
原創
370 人瀏覽過

How Can I Efficiently Insert or Update Rows Based on a Composite Key in MySQL?

使用雙重條件插入或更新

考慮一個追蹤多個實體資料的表,由名稱和日期標識。每天都會產生新行,其中包含有限名稱值清單的未來日期。目標是如果新行不存在則插入新行,或者如果存在則更新現有行。

常見的解決方案可能是檢查條件的預存過程,但這是不可行的,因為從另一種語言推送的資料。

解決方案: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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板