用于插入if不存在else更新的MySQL语句

chy5wohz  于 2023-01-16  发布在  Mysql
关注(0)|答案(4)|浏览(147)

我试图同时插入多行并检查它们是否存在。如果存在,我想更新,否则插入。
我的主键是“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
z31licg0

z31licg01#

我已决定删除记录,然后插入新记录

DELETE FROM my_table WHERE query = 'home';
INSERT INTO my_table (query, keyword) VALUES ('home', 'home-link');
wpcxdonn

wpcxdonn2#

假设表中的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/

cedebl8k

cedebl8k3#

如果不给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';
  }
");
ulydmbyx

ulydmbyx4#

从概念上讲,使用if-else语句来执行此操作没有问题,错误是由所提供的SQL中使用的if-else语法引起的。
正确的if-else语法应该是(注意关键字的不同用法):

IF (Expression )
BEGIN
  -- If the condition is TRUE then execute the following statement
  True Statements;
END
 
ELSE
BEGIN
  -- If the condition is False then execute the following statement
  False Statements;
END

代码来自:https://www.sqlshack.com/sql-if-statement-introduction-and-overview/

相关问题