mysql - MySQL插入不存在的地方不起作用
问题描述
只有当它不存在时,我才尝试执行 MySQL 插入查询。这就是我正在尝试的方式,但它不起作用。我究竟做错了什么?
INSERT INTO user_logs (log_date, log_ip, name) VALUES ('2021-09-13 00:00:00', '192.168.0.1', 'Bob')
WHERE NOT EXISTS (SELECT * FROM user_logs WHERE log_ip='192.168.0.1' AND name='Bob')
解决方案
不能WHERE
在语句中使用子句INSERT
。但是,您可以在 an中使用允许您使用条件的SELECT
语句。INSERT
WHERE
INSERT INTO user_logs (log_date, log_ip, name)
SELECT '2021-09-13 00:00:00', '192.168.0.1', 'Bob'
WHERE NOT EXISTS (SELECT * FROM user_logs WHERE log_ip = '192.168.0.1' AND name = 'Bob');
编辑:我在下面包含了测试语句和控制台输出来演示这个解决方案。
mysql> CREATE TABLE user_logs (
-> log_date TIMESTAMP,
-> log_ip VARCHAR(200),
-> name VARCHAR(200)
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO user_logs (log_date, log_ip, name) VALUES
-> ('2021-09-11 00:00:00', '192.168.0.1', 'Bob'),
-> ('2021-09-12 00:00:00', '192.168.0.2', 'Mary'),
-> ('2021-09-13 00:00:00', '192.168.0.3', 'Tom');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> INSERT INTO user_logs (log_date, log_ip, name)
-> SELECT '2021-09-14 00:00:00', '192.168.0.4', 'John'
-> WHERE NOT EXISTS (SELECT * FROM user_logs WHERE log_ip = '192.168.0.4' AND name = 'John');
Query OK, 1 row affected (0.05 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> INSERT INTO user_logs (log_date, log_ip, name)
-> SELECT '2021-09-13 00:00:00', '192.168.0.3', 'Tom'
-> WHERE NOT EXISTS (SELECT * FROM user_logs WHERE log_ip = '192.168.0.3' AND name = 'Tom');
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
推荐阅读
- java - 将字节码转换为 dex:原因:com.android.dex.DexException:多个 dex 文件定义
- django - 在两个 3rd 方模型之间添加 Django M2M 关系
- javascript - javascript对象解析和创建新对象数组
- c# - RichTextBox 从已删除的“关键字”中删除颜色
- sql - 计算具有重叠时间窗的不同值
- testing - CircleCI + 赛普拉斯配置
- scala - 如何在我的示例中加入数据框?
- spring - 如何通过 Spring Social Facebook 注册新用户?
- cors - Rally Cors 问题
- c# - 使用 Linq 从 C# 中的字典中删除具有相同值数据的多个键