如果不存在,mysql插入不起作用创建重复键
Posted
技术标签:
【中文标题】如果不存在,mysql插入不起作用创建重复键【英文标题】:mysql insert if not exists doesn't work creating duplicate keys 【发布时间】:2019-08-14 13:39:33 【问题描述】:虽然我使用的是mysql“插入忽略”语句
在名为 software 的表中插入一行
我想确保我不会插入表中已经存在的软件。
我的表叫软件,我想插入
此表的新软件,但如果它已经存在
存在于表中,我想要跳过插入
我的桌子是这样的:
+----+-----------+
| 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 新手,所以对我没有帮助
【问题讨论】:
您的表是如何定义的,尤其是在键或(唯一)索引方面? @koren 的答案有帮助吗? 【参考方案1】:检查:https://mariadb.com/kb/en/library/insert-ignore/ "通过使用 IGNORE 关键字,所有错误都将转换为警告,这不会停止插入其他行。"
如果您不希望名称中有重复条目,请将它们设为唯一:
创建表 t1 (x int UNIQUE);
【讨论】:
【参考方案2】:首先使name
列唯一,这样您就可以确定没有重复的条目:
ALTER TABLE software ADD UNIQUE (name);
然后使用INSERT IGNORE...
,如果它仍然不存在,它只会使用INSERT
【讨论】:
【参考方案3】:INSERT INTO software (id, name)
SELECT 4, 'software4'
FROM software
WHERE NOT EXISTS(
SELECT 1 FROM software WHERE name = 'software4'
) LIMIT 1;
DEMO
这将插入记录,仅当名称不存在时。
【讨论】:
insert into software
与 select from ignore
。您确定这符合您的要求吗?
如果你不给我一个小提琴来测试,那么你需要测试它。但我很确定它有效:)
“WHERE”不允许没有“FROM”。
是的,你是对的。我用演示和可行的解决方案编辑了我的帖子!以上是关于如果不存在,mysql插入不起作用创建重复键的主要内容,如果未能解决你的问题,请参考以下文章
如果 REQUIRE_ONCE 存在,HEADER 命令不起作用[重复]