如果不存在,则mysql插入无法正常工作,创建重复键

时间:2019-08-14 13:39:33

标签: mysql

尽管我正在使用mysql“ insert ignore”语句

在称为软件的表中插入一行

我想确保我不会插入表中已经存在的软件。

我的表叫做软件,我想插入

此表有新软件,但如果已经

存在于表格中,我想跳过插入

我的桌子看起来像这样:

+----+-----------+
| id | name      |
+----+-----------+
|  1 | software1 |
|  2 | software2|
|  3 | software3   |
|  4 | software4   |
|    |
+----+-----------+

我使用了“插入忽略”,但仍会创建重复的键

MariaDB [db]> insert ignore into software values (5,'software4');

现在我可以看到有一个重复的software4密钥

+----+-----------+
| id | name      |
+----+-----------+
|  1 | software1 |
|  2 | software2|
|  3 | software3   |
|  4 | software4   |
|  5   software4
+----+-----------+

尽管我可以在这里看到类似的问题:

mysql insert only if not exists doesn't work

我是mysql新手,对我没有帮助

3 个答案:

答案 0 :(得分:1)

检查:BeaconScope “通过使用IGNORE关键字,所有错误都将转换为警告,这不会停止插入其他行。”

如果您不想在名称中包含重复的条目,请使其具有唯一性:

创建表t1(x int UNIQUE);

答案 1 :(得分:1)

首先将name列设为唯一,以便确保没有重复的条目:

ALTER TABLE software ADD UNIQUE (name);

然后使用INSERT IGNORE...,它将仅在INSERT不存在的情况下使用

答案 2 :(得分:0)

INSERT INTO software (id, name)
SELECT 4, 'software4'
FROM software
WHERE NOT EXISTS(
SELECT 1 FROM software WHERE name = 'software4'
) LIMIT 1;

DEMO

仅当名称不存在时,这才插入记录。