如何在不检查每个值(如果存在)的情况下防止重复记录


How to prevent double records without checking every value if exists

我知道,如果您想防止表中出现双重输入数据,您可以通过简单的查询来检查该值是否存在

SELECT `id` FROM TABLE WHERE `title` == 'test'

我也知道PHP不能在一个查询中处理多个SQL请求,例如:

SELECT `id` FROM TABLE WHERE `title` == 'test1'
SELECT `id` FROM TABLE WHERE `title` == 'test2'
SELECT `id` FROM TABLE WHERE `title` == 'test3'

因此,解决方案是将'test1''test2''test3'放入一个数组中,循环它,并连续执行相同的查询3次。

但我想要完成的只是,只有在具有相同数据的另一行不存在的情况下才插入一行。应该有比这种方法更好的方法来做到这一点。

// if (!$row_exists) {
INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) 

为所有必要的列创建一个UNIQUE索引。MySQL不允许它们重复。

Replace Into在过去对我来说很方便。希望它能帮助

Replace Into table_name (a, b, c) VALUES (1, 2, 3);

参考:http://dev.mysql.com/doc/refman/5.0/en/replace.html

SQL有非常强大的方法来管理数组中数据的唯一性(防止重复)。我建议研究UNIQUE约束和主键的功能,看看它们是否有助于解决您的问题。

您还可以使用在单个语句中进行检查

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

然后执行插入操作。

在应该唯一的字段上添加UNIQUE约束:

ALTER TABLE table_name ADD UNIQUE u_abc (a, b, c);

然后进行INSERT IGNORE:

INSERT IGNORE INTO table_name (a, b, c) VALUES (1, 2, 3) ;

如果违反了唯一性约束(即,如果记录已经存在),则这将不插入任何内容