当前位置:网站首页>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 。
边栏推荐
猜你喜欢
随机推荐
VNCTF2021 部分题目复现
SQL Server2000 各个版本之间的区别
uniapp编译到小程序后丢失static文件夹问题
PoPW代币分配机制或将点燃下一个牛市
[漏洞复现]CVE-2018-7490(路径遍历)
代码导读-目录
JVM进程诊断利器——Arthas
gin中改进版curd接口例子
Tencent cloud server is modified to root login to install pagoda panel
加密技术和电子竞技如何促进彼此的发展
大端小端存储区别一看即懂
NodeMCU(ESP8266) 接入阿里云物联网平台 踩坑之旅
Go语言技巧之正确高效使用slice(听课笔记总结--简单易懂)
微信小程序获取用户收货地址列表wx.chooseAddress
makefile - 学习小结
零搜索量的关键词,你需要布局吗?
DeFi 项目中的治理Token
1. LVGL 8.3 在 Visual Studio 2019 模拟器中的环境搭建
XCTF College War "Epidemic" Network Security Sharing Competition Misc wp
leetcode 35. 搜索插入位置(二分法+找性质也很关键)