使用兩個條件插入或更新
這個問題看起來很簡單;然而,它需要找到一個有效的時間解決方案。考慮一個具有以下架構的表:
ID INTEGER PRIMARY KEY AUTOINCREMENT name INTEGER values1 INTEGER values2 INTEGER dates DATE
每天都會將資料加入此表中,從而產生具有未來日期的新行。 「名稱」欄位中的資料來自有限集合。所需的行為是,如果有新資料可用,則插入新行;如果已存在具有符合「名稱」和「日期」的行,則更新現有行。
解決方案:
這種情況的適當方法是「INSERT INTO ... ON DUPLICATE KEY UPDATE」語句。此語句可讓您插入新行並更新符合特定條件的現有行。在您的情況下,條件會比對“名稱”和“日期”。
要使用此方法,您的表必須有一個唯一鍵(可以是複合鍵)來偵測插入期間的衝突。這個唯一鍵可以是主鍵或複合鍵,如下所示:
UNIQUE KEY(name, dates)
如果已存在具有相同“名稱”和“日期”的行,則插入操作將被檢測為衝突,並且執行“ ON DUPLICATE KEY UPDATE」子句中指定的更新操作。
完成範例:
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) -- This line is crucial ); -- Insert a new row or update if a row with the same 'name' and 'date' exists INSERT INTO myThing(name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2=values2+1;
透過使用「INSERT INTO ... ON DUPLICATE KEY UPDATE」語句,您可以根據指定鍵的唯一性高效插入新行或更新現有行。
以上是如何在SQL中根據兩個條件高效插入或更新資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!