mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害
author:一佰互联 2019-03-29   click:194

简介:MySQL、软件编程、后端开发、软件开发、码农、计算机软件、IT、数据库、DBA插入更新一条SQL完成ON DUPLICATE KEY UPDATE这是学生表为例子,主键是SID一般插入如果有唯一约束冲突,会异常如下但业务上遇到冲突数据, ...

MySQL、软件编程、后端开发、软件开发、码农、计算机软件、IT、数据库、DBA

插入更新一条SQL完成

ON DUPLICATE KEY UPDATE

  • 这是学生表为例子,主键是SID

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

  • 一般插入如果有唯一约束冲突,会异常如下

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

  • 但业务上遇到冲突数据,想走更新数据,又不想写2个SQL(一个insertSQL ,一个update SQL )
  • 可以用 ON DUPLICATE KEY UPDATE 语法去解决
  • 具体例子如下

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

  • 这里的可以根据主键SID,还可以唯一索引去更新
  • 如我新创建了一个姓名的唯一约束

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

多个唯一索引情况

注意第一个唯一索引有效果,后面的就不执行了

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

问题

on duplicate key update这么好用的语法有什么毛病了?当然有,就是会会导致自增的主键跳跃自增测试效果如下,应该跟执行后影响条数有关系

mysql里一条SQL语句完成新增或更新,爱偷懒的程序员才厉害

总结

  • 效率变高了,一条SQL完成2条SQL的事
  • 主键值/ UNIQUE KEY 已经在表中存在,才走后面的更新SQL
  • 特别适用于多行插入的业务场景,批量执行数据时,往往不想遇到这种唯一冲突异常就终止全流程
  • VALUES()函数在INSERT…UPDATE有意义,其他情况都是返回null
  • 当表有多个唯一索引时,注意只有第一个索引会产生效果

MySQL、软件编程、后端开发、软件开发、码农、计算机软件、IT、数据库、DBA

本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yx10011.com学习互联网营销技术请到巅云建站www.yx10011.com。