考虑
INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1;
如果a和b是
UNIQUE字段,则
UPDATE发生在
a = 1 OR b = 2。同样,当
a = 1 OR b =2两个或多个条目满足条件时,更新仅执行一次。
此处带有ID和Name
UNIQUE字段的表格表
Id Name Value 1 P 2 2 C 3 3 D 29 4 A 6
如果查询是
INSERT INTO table (Id, Name, Value)VALUES (1, C, 7)
然后我们得到
Id Name Value 1 P 2 2 C 3 3 D 29 4 A 61 C 7
这违反了ID和Name的唯一性。现在用
INSERT INTO table (Id, Name, Value)VALUES (1, C, 7)ON DUPLICATE KEY UPDATE Value = 7
我们得到
Id Name Value 1 P 7 2 C 7 3 D 29 4 A 6
多个键上的行为如下
UPDATE``ON DUPLICATE KEY UPDATE如果
UNIQUE字段之一等于要插入的值,则执行in
。在这里,
UPDATE在上执行
Id = 1 OR Name = C。相当于
UPDATE table SET Value = 7WHERe Id = 1 OR Name = C
如果我只想对一个密钥进行一次更新怎么办
可以使用
UPDATE带有
LIMIT关键字的语句
UPDATE table SET Value = 7WHERe Id = 1 OR Name = CLIMIT 1;
这将给
Id Name Value 1 P 7 2 C 3 3 D 29 4 A 6
如果仅当两个键的值都匹配时我想要一次更新怎么办
一种解决方案是
ALTER TABLE使
PRIMARY KEY(或唯一性)在两个领域都起作用。
ALTER TABLE table DROP PRIMARY KEYADD PRIMARY KEY (Id, Name);
从今起
INSERT INTO table (Id, Name, Value)VALUES (1, C, 7)ON DUPLICATE KEY UPDATE Value = 7
我们得到
Id Name Value 1 P 2 2 C 3 3 D 29 4 A 61 C 7
因为没有发现两个键都重复。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)