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

你可能感兴趣的文章
python办公自动化基础输出文件和文件夹
查看>>
python办公自动化基础搜索文件
查看>>
python知识:@classmethod和@staticmethod的异同
查看>>
python前端之css
查看>>
Python制作进度条,原来有这么多方法
查看>>
Python制作简单的学生成绩管理系统
查看>>
python制作甘特图的基本知识(附Demo)
查看>>
python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>
Python到底能做什么?它的优点在哪?
查看>>
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>