maria db插入或更新

时间:2016-08-02 23:00:49

标签: sql mariadb

我有以下sql代码:

UPDATE google_calendar_accounts SET google_refresh_token="d",google_org_token="d" WHERE userID=5;
IF ROW_COUNT()=0 THEN
INSERT INTO google_calendar_accounts (userID,google_refresh_token,google_org_token) VALUES (5,"d","d"); END IF

我收到错误:

  

您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,以获得在''附近使用的正确语法。在第2行

我正在使用mariadb 10.1.14

1 个答案:

答案 0 :(得分:0)

尽管有建议执行INSERT ... ON DUPLICATE KEY UPDATE ...的评论,但仍可能有理由先进行更新,然后插入没有影响的行,就像OP尝试的那样:这样,自动增量将不会徒劳的增加。

因此,该问题的可能解决方案可能是使用条件为where row_count()=0的select from插入

例如:

--first query
UPDATE google_calendar_accounts 
SET google_refresh_token='d',google_org_token='d' 
WHERE userID=5;
--second query use the affected rows of the previous query
INSERT IGNORE INTO google_calendar_accounts (userID,google_refresh_token,google_org_token)
SELECT 5,'d','d' WHERE ROW_COUNT()=0 

顺便说一句:我已经在插入查询中添加了IGNORE,以确保存在与更新条件匹配的情况,但是由于所有列都与更新的条件相同,因此没有更新,就像之前的情况一样更新已存在5,'d','d'行。 在这种情况下,如果5是主键或唯一键,查询将不会失败。