我有以下 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
Run Code Online (Sandbox Code Playgroud)
我收到错误:
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 2 行的 '' 附近使用的正确语法
我正在使用 mariadb 10.1.14
尽管评论建议这样做INSERT ... ON DUPLICATE KEY UPDATE ...,但可能有理由先进行更新,然后在没有受影响的行的情况下插入,就像OP尝试的那样:这样自动增量就不会徒劳地增加。
因此,该问题的一个可能的解决方案可能是使用带有条件的 select 插入where row_count()=0
例如:
--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
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我已经IGNORE在插入查询中添加了与更新条件匹配的行,但它没有更新,因为所有列都与更新的列相同,就像更新之前已经有 row 的情况一样5,'d','d'。在这种情况下,如果 5 是主键或唯一键,则查询不会失败。