【问题标题】:maria db insert or updatemariadb 插入或更新
【发布时间】:2016-08-02 23:00:49
【问题描述】:

我有以下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

【问题讨论】:

标签: sql mariadb


【解决方案1】:

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

因此,该问题的可能解决方案可能是使用 insert from 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 

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

【讨论】:

  • INSERT IGNORE 可能会因为重复密钥以外的其他原因静默失败
猜你喜欢
  • 2020-02-25
  • 2016-05-02
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 2012-10-29
  • 2011-01-17
相关资源
最近更新 更多