使用INSERT的时候 有表T(id,A,B,C,D)
插入的时候希望通过A,B索引唯一记录 ,有重复的时候更新C,D
INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ON DUPLICATE KEY UPDATE C=C+1,D=d
居然是可用的
INSERT 和UPDATE都是正常的
只是不知道有没有其他问题
所以 MySQL到底是如何判断DUPLICATE KEY的?
使用INSERT的时候 有表T(id,A,B,C,D)
插入的时候希望通过A,B索引唯一记录 ,有重复的时候更新C,D
INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ON DUPLICATE KEY UPDATE C=C+1,D=d
居然是可用的
INSERT 和UPDATE都是正常的
只是不知道有没有其他问题
所以 MySQL到底是如何判断DUPLICATE KEY的?
4 回答1.7k 阅读✓ 已解决
8 回答1.4k 阅读
3 回答1.4k 阅读✓ 已解决
4 回答2.3k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.8k 阅读
1 回答976 阅读✓ 已解决
这条语句相当于:
当INSERT(因为主键或唯一键冲突)失败时,执行
只是这个过程用一个原子语句来实现罢了,具体可参阅MySQL的官方文档: https://dev.mysql.com/doc/ref...
如果表中有多个唯一键,情况就更复杂了,有兴趣可以深入研究。
还有一个类似的语句叫 REPLACE 跟INSERT ... ON DUPLICATE KEY UPDATE作用类似,但原理是不一样的,有兴趣可参阅: https://dev.mysql.com/doc/ref...