INSERT IGNORE不起作用

时间:2016-01-27 18:13:48

标签: php mysql sql

我尝试INSERT IF NOT EXISTS

所以我搜索了这个,我找到了:How to 'insert if not exists' in MySQL?

所以我尝试使用IGNORE,这是我的表:

CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255),
`mail` VARCHAR(255),
PRIMARY KEY (`id`)
) CHARACTER SET utf8 COLLATE utf8_general_ci;

这是我的疑问:

INSERT IGNORE INTO `users` SET `mail` = ?, `name` = ?

但它的插入即使存在 所以我搜索了那个,我找到了:mySQL INSERT IGNORE doesn't "ignore"

我在那里读到只有PRIMARY KEY它的剂量插入重复

所以你可以在我的表格中看到我有PRIMARY KEY
如果问题是我需要在我的查询中插入id字段它的问题,因为我不知道当我进行查询时它是什么 那么如何在不创建重复项的情况下将信息插入到数据库中呢?

3 个答案:

答案 0 :(得分:1)

插入忽略仅在您尝试将值插入主键(id)列时起作用,但您没有包含id。另一方面,你甚至不需要它。你说得对。当你插入一个新用户时,它会获得下一个可用的用户,因为它是auto_increment。

也许您想要将电子邮件字段设为uniq,因此两个用户不能拥有相同的电子邮件。在这种情况下,如果您使用了表中已有的电子邮件,则插入忽略将忽略添加新行。

答案 1 :(得分:0)

您必须先使用您要插入的信息进行选择,如果结果中包含一行或多行,则不要插入。

例如,运行查询SELECT count(*) from users where mail = ? and name = ? 然后检查返回的结果对象,并根据它插入或跳过。

答案 2 :(得分:0)

INSERT IGNORE仅在违反某些密钥时跳过记录。在您的案例中创建一个唯一的密钥:

CREATE UNIQUE INDEX uniq_users ON users (name, mail);