如果存在,如何在不检查每个值的情况下防止双记录

时间:2013-08-01 16:43:13

标签: php mysql arrays

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

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

我也知道PHP无法在1个查询中处理多个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) 

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

在应该是唯一的字段上添加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) ;

如果违反unicity约束(即如果记录已存在),则不会插入任何内容

答案 2 :(得分:0)

替换为过去对我来说很方便。希望它有所帮助

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您还可以使用以下方法检查单个语句:

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

然后执行插入操作。