2013-07-22 15 views
1

我想写一个查询,以检查是否存在记录(基于夫妇的条款,而不是唯一标识符),如果这样的搜索返回的记录,然后我需要更新所有找到的记录,如果没有找到,那么我需要插入记录。请注意,我不能使用IF EXISTS,因为我正在尝试查询客户端脚本而不是服务器端。所以,我来到INSERT INTO的横想法....对重复KEY我可以在不使用auto_increment值的情况下使用INSERT INTO ...在DUPLICATE KEY上吗?

我能做到这一点不知道该行密钥标识符?因此,如果我找到accountid = 17和name ='Mike'的记录,那么如果没有这两个子句的记录,则将其更新为名称'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 

这种方法能处理什么,我试图做一个尝试?如果是,那么你能纠正我的语法吗?

谢谢

回答

2

你能得到这个工作的唯一方法是,如果你有领域的主键或唯一约束。从文档:

如果指定了对重复密钥更新,和行插入该 会引起一个唯一索引或主键的重复值,进行 更新旧行。例如,如果列中的被声明为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'; 

没有唯一密钥,它会插入一个重复的记录。

相关问题