博客
关于我
ON DUPLICATE KEY UPDATE 用法与说明
阅读量:639 次
发布时间:2019-03-14

本文共 1751 字,大约阅读时间需要 5 分钟。

ON DUPLICATE KEY UPDATE作用及使用方法

MySQL的ON DUPLICATE KEY UPDATE是一个强大的工具,可以帮助开发者在插入操作中自定义处理已存在记录的逻辑。这一功能在处理重复插入冲突时特别有用。以下将详细介绍其用法及实际应用场景。


重复插入处理

ON DUPLICATE KEY UPDATE主要用于解决插入操作中重复主键值的问题。假设有一个表 user_admin_t,其主键为 _id,当尝试插入与已有记录重复的主键值时,会触发更新操作。

例如,考虑以下表结构:

CREATE TABLE user_admin_t (    _id VARCHAR(255) PRIMARY KEY,    password VARCHAR(255));

初次插入

第一次插入如下 SQL:

INSERT INTO user_admin_t (_id, password) VALUES ('1', '第一次插入的密码');

执行后,表中将新增一条记录:

_id password
'1' '第一次...'

重复插入

再次运行同样的插入 SQL:

INSERT INTO user_admin_t (_id, password) VALUES ('1', '第一次插入的密码');

这时会出现主键冲突:

[Error] 1062 - Duplicate entry '1' for key 'PRIMARY'

解决方法:触发更新

为避免冲突,可以在插入语句末添加 ON DUPLICATE KEY UPDATE,用于指定在冲突发生时所需执行的更新操作。例如:

INSERT INTO user_admin_t (_id, password) VALUES ('1', '第一次插入的密码') ON DUPLICATE KEY UPDATE    _id = 'UpId',    password = 'upPassword';

该处的变化

  • _id 存在时,会更新 password'upPassword'
  • 主键 _id 保持不变,但 password 得到更新。
  • 受影响的行为:修改已有记录。

执行后的表数据示例如下:

_id password
'1' 'upPassword'

处理多条记录

考虑插入多条记录,包括已经存在的 _id 和新插入的。例如:

INSERT INTO user_admin_t (_id, password) VALUES ('1', '多条插入1'), ('2', '第二条记录') ON DUPLICATE KEY UPDATE    password = '更新后的密码';

执行结果

  • _id'1' 的记录,password 更新为 '多条插入1'
  • _id'2' 的记录新插入至表中。
  • 表中数据:
_id password
'1' '多条插入1'
'2' '第二条记录'

动态更新值

有时需要为不同的 _id 动态设置不同的更新值。在这种情况下,可以利用 VALUES 函数动态传递更新值。例如:

INSERT INTO user_admin_t (_id, password) VALUES ('1', '多条插入1'), ('UpId', '多条插入2') ON DUPLICATE KEY UPDATE    password = VALUES('多条插入1'), VALUES('多条插入2');

该处的解释

  • 对于 _id'1' 的记录,password 更新为 '多条插入1'
  • 对于 _id'UpId' 的记录,password 更新为 '多条插入2'

这种方法特别适用于批量插入或动态更新操作。


总结

ON DUPLICATE KEY UPDATE 是一个强大的工具,能够在插入操作中自动触发更新。其优势在于无需手动检查记录存在状态,可以简化代码结构,提升性能。然而,这一功能是 MySQL 特有的,使用时需确保主键和插入值的对应关系正确,避免因逻辑错误导致意外修改数据。

在实际应用中,可以根据需求灵活配置更新逻辑,例如通过 SET 类似语法或结合事务处理,以实现更复杂的数据管理需求。

转载地址:http://vpooz.baihongyu.com/

你可能感兴趣的文章
Plotly:如何从单条迹线制作堆积条形图?
查看>>
Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
查看>>
Plotly:如何使用 Plotly Express 组合散点图和线图?
查看>>
Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
查看>>
Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
查看>>
Plotly:如何使用 updatemenus 更新一个特定的跟踪?
查看>>
Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
查看>>
Plotly:如何向烛台图添加交易量
查看>>
Plotly:如何在 plotly express 中找到趋势线的系数?
查看>>
Plotly:如何在桑基图中设置节点位置?
查看>>
Plotly:如何处理重叠的颜色条和图例?
查看>>
Plotly:如何手动设置 plotly express 散点图中点的颜色?
查看>>
Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
查看>>
Plotly:如何绘制累积的“步骤“;直方图?
查看>>
Quartz进一步学习与使用
查看>>
Plotly条形图-根据正/负值更改颜色-python
查看>>
PLSQL developer12安装图解
查看>>
PLSQL Developer调试 存储过程和触发器
查看>>
PLSQL window操作
查看>>
plsql 存储过程 测试
查看>>