使用两个条件插入或更新
这个问题看起来很简单;然而,它需要找到一个有效的时间解决方案。考虑一个具有以下架构的表:
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中文网其他相关文章!