我有以下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
答案 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是主键或唯一键,查询将不会失败。