博客
关于我
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/

你可能感兴趣的文章
OSPF技术连载17:优化OSPF网络性能利器——被动接口!
查看>>
OSPF技术连载18:OSPF网络类型:非广播、广播、点对多点、点对多点非广播、点对点
查看>>
OSPF技术连载19:深入解析OSPF特殊区域
查看>>
SQL Server 复制 订阅与发布
查看>>
OSPF技术连载20:OSPF 十大LSA类型,太详细了!
查看>>
OSPF技术连载21:OSPF虚链路,现代网络逻辑连接的利器!
查看>>
OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
查看>>
Padding
查看>>
paddlehub安装及对口罩检测
查看>>
paddle的两阶段基础算法基础
查看>>
SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
查看>>
PageHelper 解析及实现原理
查看>>
pageHelper分页工具的使用
查看>>
PageHelper:上手教程(最详细)
查看>>
PageOffice如何实现从零开始动态生成图文并茂的Word文档
查看>>
PageRank算法
查看>>
Paint类(画笔)
查看>>
paip.android 手机输入法制造大法
查看>>
paip.spring3 mvc servlet的配置以及使用最佳实践
查看>>
Palindrome Number leetcode java
查看>>