使用双重条件插入或更新
考虑一个跟踪多个实体数据的表,由名称和日期标识。每天都会生成新行,其中包含有限名称值列表的未来日期。目标是如果新行不存在则插入新行,或者如果存在则更新现有行。
常见的解决方案可能是检查条件的存储过程,但这是不可行的,因为从另一种语言推送的数据。
解决方案: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中文网其他相关文章!