PostgreSQL的INSERT ON CONFLICT冲突更新语句如何转MySQL语法
PostgreSQL 冲突更新语句转 MySQL 方案
等效语法
PostgreSQL 中的 ON CONFLICT(id) DO UPDATE 语法对应 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE 特性,转换后的语句如下:
sql = '''INSERT INTO `user` (id, chat_id, state) VALUES(%s, %s, 1) ON DUPLICATE KEY UPDATE chat_id = VALUES(chat_id), state = VALUES(state); '''
说明
- 你已经将 id 设为表的主键,满足
ON DUPLICATE KEY UPDATE的触发条件:主键/唯一索引冲突时自动执行后续更新逻辑 - 去掉了原语句中的
public.前缀,因为 MySQL 没有 PostgreSQL 中的 schema 概念,和你已创建的表结构匹配 - 语句中的
VALUES(chat_id)等价于 PostgreSQL 中的EXCLUDED.chat_id,代表本次插入语句中传入的对应字段值 - 执行该语句时会自动触发表定义中
update_time字段的ON UPDATE CURRENT_TIMESTAMP逻辑,无需额外配置
内容的提问来源于stack exchange,提问作者Tilei Liu
相关产品推荐
相关产品推荐

