我试图同时插入多行并检查它们是否存在。我想更新它们是否存在,否则插入。
我的主键是“ID”。 我不想为“查询”列使用唯一索引。
我要插入/更新的内容:
INSERT INTO my_table (query, keyword) VALUES ('home', 'home-link');
INSERT INTO my_table (query, keyword) VALUES ('contact', 'contact-link');
我的桌子:
--------------------------------
ID | query | keyword |
--------------------------------
1 | home | home-link |
--------------------------------
2 | contact | contact-link |
--------------------------------
我试过了,但它给了我SQL语法错误#1064:
IF EXISTS(SELECT query FROM my_table WHERE query='home')
THEN
UPDATE my_table SET query='home' AND keyword='home-link' WHERE query='home'
ELSE
INSERT INTO my_table (query, keyword) VALUES ('home', 'home-link')
END IF
IF EXISTS(SELECT query FROM my_table WHERE query='contact')
THEN
UPDATE my_table SET query='contact' AND keyword='contact-link' WHERE query='contact'
ELSE
INSERT INTO my_table (query, keyword) VALUES ('contact', 'contact-link')
END IF
答案 0 :(得分:0)
假设您的表中的query
列有唯一索引,您可以像这样执行upsert:
insert into my_table (query, keyword) values ('home', 'home-link')
on duplicate key update
keyword = values(keyword)
更多信息: http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/
答案 1 :(得分:0)
如果您没有为query
列添加唯一索引,则只能使用SQL执行upsert。您尝试的条件语法不受支持。
您可以编写存储过程来执行此操作,或使用脚本语言(bash,python等)。
另一个选择是安装common_schema并使用conditional logic in QueryScript。以下是使用common_schema QueryScript的示例:
call common_schema.run("
if (
select count(*)=0
from test.my_table
where query='home'
)
{
insert into test.my_table (query, keyword) values ('home', 'home-link');
}
else
{
update test.my_table set keyword='home-link' where query='home';
}
");
答案 2 :(得分:0)
我决定删除记录,然后插入新记录
DELETE FROM my_table WHERE query = 'home';
INSERT INTO my_table (query, keyword) VALUES ('home', 'home-link');