MySQL中INSERT WHERE NOT EXISTS插入语句不生效该如何修正?
问题原因
MySQL 标准 INSERT ... VALUES 语法不支持直接追加 WHERE 过滤条件,这是你的语句无法正常执行的核心错误。
正确实现方案
你可以任选以下两种常用方案实现需求:
改用
INSERT ... SELECT语法
把要插入的值放在SELECT子句中,搭配WHERE条件实现不存在才插入的逻辑,MySQL 中可以借助DUAL虚拟表补齐语法要求:INSERT INTO user_logs (log_date, log_ip, name) SELECT '2021-09-13 00:00:00', '192.168.0.1', 'Bob' FROM DUAL WHERE NOT EXISTS ( SELECT * FROM user_logs WHERE log_ip='192.168.0.1' AND name='Bob' );配合唯一索引使用
INSERT IGNORE(更推荐)
如果你判断记录是否存在的依据固定是log_ip和name两个字段,建议先给这两个字段加联合唯一索引,再用INSERT IGNORE语法,性能更高,还能避免并发场景下的竞态问题:
第一步:加联合唯一索引ALTER TABLE user_logs ADD UNIQUE KEY uk_log_ip_name (log_ip, name);第二步:执行插入语句
INSERT IGNORE INTO user_logs (log_date, log_ip, name) VALUES ('2021-09-13 00:00:00', '192.168.0.1', 'Bob');已经存在相同
log_ip和name的记录时,这条语句会自动忽略插入操作,不会抛出错误。
内容的提问来源于stack exchange,提问作者John Roberts
相关产品推荐
相关产品推荐

