Mysql + ON DUPLICATE KEY UPDATE

时间:2011-12-22 22:08:14

标签: mysql

 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;

是否可以设置它,因此它不需要和整个匹配行。 例如:如果列'a'是重复的,那么进行更新吗?

THX

2 个答案:

答案 0 :(得分:6)

ON DUPLICATE KEY就是这样......如果您插入的数据违反了唯一的密钥要求,请将其转换为具有导致违规的密钥组合的行的更新。如果您的主键只是其中一个字段(例如'a'),并且您已经在表中有一行a = 1,那么您将获得更新而原始行将获得其'c'设置到3。

如果它是一个复合键(比如'a,b'),那么如果你有一个a = 1且b = 2的现有记录,那么那些行的C将变为3而不是新的记录创建

如果此表中没有唯一/主键,那么您永远不会得到更新,它只是一个额外详细的插入语句。

答案 1 :(得分:2)

行是否重复是由表上的约束决定的。这将是您的主键,以及表中的所有唯一键。因此,如果a列上有非多列唯一索引,则可以使用。

否则,您可以使用触发器实现此目的。