2011-12-22 163 views
1
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; 

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

thx

回答

6

ON DUPLICATE KEY就是这么做的......如果你插入的数据违反了唯一的密钥要求,把它变成具有导致违规的组合键的行的更新。如果你的主键只是其中一个字段(例如'a'),并且你已经在表中有一行a = 1,那么你会得到一个更新,而原来的行会得到'c'集到3.

如果它是一个组合键(如'a,b'),那么如果你有一个现有的记录,其中a = 1和b = 2,那么那些行的C会变成3而不是正在创造一项新纪录。

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

+0

感谢堆 - 了解并更新/更改了独特密钥的设置方式 - 非常出色......当时间限制过去时会打勾... – Adam 2011-12-22 22:20:58

2

行是否重复是由表上的约束决定的。这将是您的主键,以及桌子上的所有唯一键。因此,如果您在a列上有非多列唯一索引,那么它将起作用。

否则,你可能可以通过触发器来实现。