当前位置:网站首页>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 。
边栏推荐
猜你喜欢
随机推荐
【LeetCode每日一题】——225.用队列实现栈
大学四年不努力,出社会后浑浑噩噩深感无力,辞去工作,从头开始
支付宝小程序禁止页面弹性下拉或上拉
ctf misc picture questions knowledge points
Arduino+2片74hc595 驱动8x8(共阳)点阵(1008BS)
Anaconda4.8.3介绍、安装及使用教程安装(win10)并修改Jupyter默认工作目录
SQL server中的数据类型
这下你知道为什么程序员要和产品干架了吧?
BUUCTF MISC刷题笔记(二)
gin中简单的curd接口例子
没有对象的可以进来看看, 这里有对象介绍
无符号整数文法和浮点数文法
【培训课程专用】RPC模型:代码导读
PoPW代币分配机制或将点燃下一个牛市
零搜索量的关键词,你需要布局吗?
图像识别后将识别结果整理成列表,点击列表可跳转到搜索页面
SQL Server2000 各个版本之间的区别
VoLTE基础自学系列 | IMS的业务触发机制
营养与健康(HIT2021秋)
一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)