插入更新一条SQL完成
ON DUPLICATE KEY UPDATE
- 这是学生表为例子,主键是SID
- 一般插入如果有唯一约束冲突,会异常如下
- 但业务上遇到冲突数据,想走更新数据,又不想写2个SQL(一个insertSQL ,一个update SQL )
- 可以用 ON DUPLICATE KEY UPDATE 语法去解决
- 具体例子如下
- 这里的可以根据主键SID,还可以唯一索引去更新
- 如我新创建了一个姓名的唯一约束
多个唯一索引情况
注意第一个唯一索引有效果,后面的就不执行了
问题
on duplicate key update
这么好用的语法有什么毛病了?
当然有,就是会会导致自增的主键跳跃自增
测试效果如下,应该跟执行后影响条数有关系
总结
- 效率变高了,一条SQL完成2条SQL的事
- 主键值/ UNIQUE KEY 已经在表中存在,才走后面的更新SQL
- 特别适用于多行插入的业务场景,批量执行数据时,往往不想遇到这种唯一冲突异常就终止全流程
- VALUES()函数在INSERT…UPDATE有意义,其他情况都是返回null
- 当表有多个唯一索引时,注意只有第一个索引会产生效果