MySQL批量插入:仅当SomeId未存在时插入(复合唯一键场景)
批量插入满足条件的记录
可以通过 NOT EXISTS 子查询结合批量值列表的方式实现单条SQL插入,核心逻辑是先检查目标 SomeId 是否未在表中出现过(无论 UsedForUniqueKey 取何值,包括NULL),再执行插入:
INSERT INTO testinserttable (SomeId, UsedForUniqueKey) SELECT val.SomeId, NULL FROM ( VALUES ('Bye'), ('ola'), ('Hi') ) AS val(SomeId) WHERE NOT EXISTS ( SELECT 1 FROM testinserttable t WHERE t.SomeId = val.SomeId );
逻辑说明
VALUES ('Bye'), ('ola'), ('Hi')生成待插入的SomeId数据集;NOT EXISTS子查询验证当前待插入的SomeId未在表的任何记录中出现过(因为复合唯一键中SomeId是非NULL的,只要表中存在该SomeId,无论UsedForUniqueKey是否为NULL,都不满足插入条件);- 插入时
UsedForUniqueKey设为NULL,如果需要特定默认值可替换为对应值。
内容的提问来源于stack exchange,提问作者user369122
相关产品推荐
相关产品推荐

