首页 > 数据库 > mysql教程 > MySQL中如何基于组合键高效插入或更新行?

MySQL中如何基于组合键高效插入或更新行?

Patricia Arquette
发布: 2024-12-29 18:36:11
原创
376 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板