如何在MySQL多值插入的ON DUPLICATE KEY UPDATE中避免使用VALUES()?
MySQL批量插入时ON DUPLICATE KEY UPDATE替代VALUES()的写法
MySQL官方已宣布VALUES()函数将在未来版本移除,针对你提供的批量插入语句,有两种常用的改写方式:
方法一:使用EXCLUDED关键字(推荐,MySQL 8.0.20+支持)
EXCLUDED关键字代表原本要插入的行的数据,直接用它来引用对应列即可,写法简洁且符合官方后续规范:
insert into my.table (id, text) values (1, 'hello world'), (2, 'hello again') on duplicate key update text = EXCLUDED.text;
方法二:用INSERT ... SELECT替代(兼容低版本MySQL)
如果你的MySQL版本不支持EXCLUDED,可以把批量值包装成子查询并指定别名,在更新时引用子查询的列:
insert into my.table (id, text) select id, text from ( select 1 as id, 'hello world' as text union all select 2 as id, 'hello again' as text ) as temp_rows on duplicate key update text = temp_rows.text;
内容的提问来源于stack exchange,提问作者dannielsen
相关产品推荐
相关产品推荐

