首页 > 解决方案 > 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') 

标签: mysql

解决方案


不能WHERE在语句中使用子句INSERT。但是,您可以在 an中使用允许您使用条件的SELECT语句。INSERTWHERE

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

推荐阅读