如果不存在则插入不插入

时间:2019-06-06 17:40:49

标签: mysql sql sql-insert

INSERT INTO my_table (field_1, field_2)
SELECT val_1, val_2     
FROM my_table
WHERE NOT EXISTS (SELECT field_1
                        FROM my_table
                        WHERE field_2 = val_2)
LIMIT 1

我不能在field_2字段上使用唯一索引。 我正在尝试插入是否不存在具有field2 = val_2的元组。 如果没有“ where”子句,则此插入。 使用“ where”子句即使是空表,也不会插入。

有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

解决方案是检查密钥是否存在:

INSERT INTO my_table (field_1, field_2) ON DUPLICATE KEY INSERT IGNORE.

this question可能有用。

答案 1 :(得分:0)

我猜val_1val_2不是表的列,对吗?
它们是您要在表中插入的值。
放下:

FROM my_table

并使用:

INSERT INTO my_table (field_1, field_2)
SELECT val_1, val_2     
WHERE NOT EXISTS (
  SELECT field_1
  FROM my_table
  WHERE field2 = val_2
)

答案 2 :(得分:0)

首先在您不想重复的一个或多个列上创建唯一索引。我无法判断是同时出现在field_2上还是

create unique index unq_my_table_field_2 on my_table(field_2);

然后使用on duplicate key update忽略该错误:

INSERT INTO my_table (field_1, field_2)
    VALUES (val_1, val_2)
    ON DUPLICATE KEY UPDATE field_2 = VALUES(val_2);   -- this is a no-op, because the value is already the same

您的代码无法在空表上运行的事实与WHERE子句无关,而与在from子句中使用from my_table无关。如果没有行,则查询返回。 。 。没有行。毫不奇怪,什么也没插入。