如何防止数据库中出现重复项

时间:2013-10-31 08:04:26

标签: php mysql

我有一个CSV文件,我将其投入数据库。它正确地做到了这一点,但我不想显然重复记录。任何想法我怎么能只记录独特的?我不想将它们放入数据库然后运行DELETE查询,因为这不是时间效果。

if (($handle = fopen($csvfile, "r")) !== FALSE) {
            while (($data = fgetcsv($handle,1000, ',')) !== FALSE) {
                $count ++;
                if ($count > 1) {
                    mysqli_query($con, "INSERT INTO $table2 (id, cat) VALUES ('".$data[0]."', '".$data[1]."')");  
                    mysqli_query($con, "INSERT INTO $table1 (id, cat) VALUES ('".$data[2]."', '".$data[3]."')"); 
                    mysqli_query($con, "INSERT INTO $table3 (id, word) VALUES ('".$data[4]."', '".$data[5]."')"); 
                    mysqli_query($con, "INSERT INTO $table4 (id, cl, co, imp) VALUES ('".$data[0]."','".$data[6]."', '".$data[7]."', '".$data[8]."')"); 
                }
            }

        }

2 个答案:

答案 0 :(得分:3)

一种方法是在插入所有记录后,您可以添加唯一索引并使用

删除重复项
ALTER IGNORE TABLE your_table
ADD UNIQUE INDEX dup_idx (column_1, column_2, column_3, column_3);

另一种方法是在插入之前添加此唯一索引,然后使用insert ignore查询

INSERT IGNORE INTO table (column1,column2) VALUES ('value1','value2');

这将忽略插入重复条目时发生的错误,因为唯一索引也会跳过重复条目插入。

答案 1 :(得分:0)

您可以使用唯一键方式,也可以使用

WHERE NOT EXISTS 

在您考虑查找副本的特定列上。 所以它就像

Insert into table name() values () where not exists (Select statement)