当前位置:网站首页>on duplicate key update
on duplicate key update
2022-08-09 09:07:00 【胡乐天】
1.语法:
insert into 表名(字段名1,字段名2,字段名3,字段名4……)
values(字段1的值,字段2的值,字段3的值,字段4的值……)
on duplicate key update 某字段=某字段的值,某字段=某字段的值,某字段=某字段的值
例如:
-- id为主键,school_code为唯一约束
-- id使用的是uuid,一般不会重复
-- 如果学校编码列不存在nanshan,则插入该数据
-- 如果存在nanshan这个学校编码,则将学校地址更换为‘东海’
insert into school(id,school_code,school_address)
values(UUID(),'nanshan','月亮湾')
on duplicate key update school_address='东海'
2.意思:
判断该数据是否存在于表中(存在规则:primary key 和 unique key),如果不存在则插入一条,如果存在则update该条数据。
3.注意:
1.假如插入一条数据时 主键 和 唯一性的数据都存在于表中,但是主键确定的数据和唯一性确定的数据数据不是同一条(实际上,出现这种情况为插入的数据有问题,我们只是假设出现这种情况),此时,update的数据为主键的那一条还是唯一性中确定的那一条呢?
经实验后,为主键那一条。
2.若执行的为insert语句,则返回的结果:Affected rows:1
若执行的为update语句,则返回的结果为:Affected rows: 0 或者 Affected rows: 2
即使是update,那影响的应该是0行或者一行啊,为啥出来个2呢。此处参考官方解释
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
红色区域翻译:
如果是insert则为1;
如果是update,但是update内容与原有数据一致则为0,与原有数据不一致则为2;
所以影响的行数在此处只是代表的是执行的是什么操作。
3.也有人这样写
insert ignore into ed_auth(phone_open_id,diagnostician_uid,name,school_code,id)
values(?,?,?,?,?)
on duplicate key update phone_open_id=?,name=?,school_code=?
这样与上边语法相比,在insert后面多了一个ignore,其实这是一个独立的语法(update中也可以使用),ignore的本意为忽略,此处则为忽略错误,即发生插入错误时(是数据错误,不是SQL语法错误),不报错,只是返回Affected rows: 0 。
边栏推荐
猜你喜欢
随机推荐
关于指针、地址的大小的问题(以及malloc的用法)
The embedded serial port interrupt can only receive one byte
数据治理(四):数据仓库数据质量管理
【场景化解决方案】构建设备通讯录,制造业设备上钉实现设备高效管理
leetcode 36. 有效的数独(模拟题)
【场景化解决方案】OA审批与用友U9数据集成
BUUCTF MISC brush notes (2)
Getting started with ctfshow-web Part of the file upload part solution
第五届蓝帽杯初赛 misc 赛后复现
嵌入式之串口中断只能收到一个字节
【培训课程专用】RPC模型:代码导读
内存中的swap机制
H5页面px不对,单位不对等问题
【CNN】2022 ECCV 对比视觉Transformer的在线持续学习
[V&N2020 公开赛]内存取证
【场景化解决方案】ERP系统与钉钉实现数据互通
Venture DAO 行业研报:宏观和经典案例分析、模式总结、未来建议
微信小程序转支付宝小程序注意事项
权限管理模型 ---- ACL、RBAC和ABAC(详解)
绝了,这套RESTful API接口设计总结