MYSQL中的ON DUPLICATE KEY UPDATE

Posted 行走的灵魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL中的ON DUPLICATE KEY UPDATE相关的知识,希望对你有一定的参考价值。

今天查看数据入库脚本时,看到使用的插入语句是:

INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...;

自己第一次遇到,正好查询文档学习下。

  使用这条语句的原因,是为了更好的执行插入和更新,因为我们再插入一条语句时,表中可能已经存在了这条语句,我们想实现更新的功能,或者表中没有这条语句,我们想实现插入的功能,而这条语句直接可以同时解决插入和更新的功能。

  那么这条语句是如何解释呢,我们很容易理解前面的部分,就是一个简单的插入语句,让我们看下后面的部分ON DUPLICATE KEY UPDATE field1=value1,field2=value2...我们看到后面是一个更新的操作,后面指定了更新的字段,也就是说判断出表中没有这条数据,执行的前半部分,插入指定字段得值,在判断出表中有数据,则执行的的更新操作,更新后半部分指定的字段的值。

  那么下一个问题出来了,我们是如何判断出这条数据是存在的,又需要更新哪些字段呢。

规则如下:

  如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。(这部分不确定,还需要验证)

  而至于要更新哪些字段,要看我们自己的需求了。

  说到这里我觉得,需要自己学习和总结一篇mysql索引的知识点了,期待ing...

以上是关于MYSQL中的ON DUPLICATE KEY UPDATE的主要内容,如果未能解决你的问题,请参考以下文章

相当于 Sql Server 中的 MySQL ON DUPLICATE KEY UPDATE

MySQL中的`REPLACE`和`INSERT ... ON DUPLICATE KEY UPDATE`之间有啥实际区别?

MySQL INSERT ON DUPLICATE KEY UPDATE

on duplicate key update 的使用(数据库有就修改,没有就添加数据)

mysql ON DUPLICATE KEY UPDATE

INSERT..ON DUPLICATE KEY UPDATE 语句中的锁定如何工作?