我试图同时插入多行并检查它们是否存在。如果存在,我想更新,否则插入。
我的主键是“ID”。我不想对“查询”列使用唯一索引。
我想插入/更新的内容:
INSERT INTO my_table (query, keyword) VALUES ('home', 'home-link');
INSERT INTO my_table (query, keyword) VALUES ('contact', 'contact-link');
我的table:
--------------------------------
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
4条答案
按热度按时间z31licg01#
我已决定删除记录,然后插入新记录
wpcxdonn2#
假设表中的
query
列有一个唯一索引,可以执行如下upsert操作:更多信息:http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/
cedebl8k3#
如果不给
query
列添加唯一索引,则不能只使用SQL执行upsert,因为不支持您尝试的条件语法。您可以编写一个存储过程来完成此操作,或者使用脚本语言(bash、python等)。
另一种选择是安装common_schema并使用conditional logic in QueryScript。下面是一个使用common_schema QueryScript的示例:
ulydmbyx4#
从概念上讲,使用if-else语句来执行此操作没有问题,错误是由所提供的SQL中使用的if-else语法引起的。
正确的if-else语法应该是(注意关键字的不同用法):
代码来自:https://www.sqlshack.com/sql-if-statement-introduction-and-overview/