1

我正在尝试编写一个查询来检查记录是否存在(基于几个子句而不是唯一标识符)如果这样的搜索返回记录,那么我需要更新所有找到的记录,如果没有找到那么我需要插入记录。请注意,我不能使用 IF EXISTS 因为我正在尝试查询客户端脚本而不是服务器端。所以我想到了 INSERT INTO .... ON DUPLICATE KEY

我可以在不知道行键标识符的情况下执行此操作吗?因此,如果我找到 accountid = 17 和 name = 'Mike' 的记录,然后如果没有带有这 2 个子句的记录,则更新它以使名称为“Mike A”,然后插入一条记录。

这是给我一个语法错误的尝试

INSERT INTO test (name, accountid) VALUES ('Mike', 17)
  ON DUPLICATE KEY 
UPDATE test SET name='Mike A' WHERE name ='Mike' AND accountid = 17

这种方法可以处理我想要做的事情吗?如果是,那么您能纠正我的语法吗?

谢谢

4

1 回答 1

2

你可以让它工作的唯一方法是,如果你在字段上有一个主键或唯一约束。从文档中:

如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中出现重复值,则会执行旧行的 UPDATE。例如,如果列 a 被声明为 UNIQUE 并且包含值 1,则以下两个语句具有相同的效果:

create table test (name varchar(100), accountid int);
insert into test values ('Mike', 17);
alter table test add unique (name, accountid);

insert int test (name, accountid) values ('Mike', 17)
on duplicate key update name='Mike A';

如果没有唯一键,它将插入重复记录。

于 2013-07-22T00:45:02.683 回答