今天查看数据入库脚本时,看到使用的插入语句是:
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索引重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。
比如我创建表的时候设置的唯一索引为字段a,b,c,那么当a,b,c三个字段完全重复时候,此时就要执行更新语句。当然满足一部分唯一索引是不会触发更新操作的,此时会执行插入操作。
而至于要更新哪些字段,要看我们自己的需求了。
说到这里我觉得,需要自己学习和总结一篇MYSQL索引的知识点了,期待ing...