如何防止在MySQL中插入重复数据

时间:2014-05-30 07:10:14

标签: php mysql

我的代码运行良好。

$sql = "INSERT IGNORE INTO phpc_events (cid, owner, subject, description, ctime) 
SELECT '1', '1', title, description, start_tdate from at_courses";

mysql_query($sql);

我把它放到这个页面中:

>  http://localhost/msigilearnv2/tools/calender/copy_database.php

首次运行页面时,它会将表从at_courses复制到phpc_events。 当第二次运行..我怎么能防止重复数据?因为它会不断添加相同的数据。我把忽略但仍然无效

4 个答案:

答案 0 :(得分:1)

我正在与您分享其中一个替代方案。假设您在数据库中有记录,并且cid值为“1”。

如果值已存在于数据库中,请先检查该值。

$sql = "SELECT cid FROM phpc_events";
$returned = mysql_query($sql);
if(mysql_num_rows($returned) > 0){
    while( $row = mysql_fetch_array($returned) ){
        $PhpcArray [] = $row; //stores result returned in array to ensure less resource used
    }
}

$sqlC = "SELECT anotherId FROM at_courses";
$returnedC = mysql_query($sqlC);
if(mysql_num_rows($returnedC) > 0){
    while( $rowC = mysql_fetch_array($returnedC) ){
        if( in_array( $rowC['anotherId'], $PhpcArray ) ){
            // do nothing as id is already exists in phpc_events
        }
        else{
            // do insertion because id in at_courses is not exist yet in phpc_events
        }
    }
}

希望这有帮助。

另一种选择。

顺便说一下,如果它与您的列匹配,您也可以尝试此查询,因为我不知道您的表结构是什么样的

SELECT cid 
FROM at_courses 
WHERE cid NOT IN (
                 SELECT cid FROM phpc_events
                 )

此查询将返回at_courses中的cid,该cid尚未出现在phpc_events中。然后插入从at_courses表返回的那些cid。

谢谢。

答案 1 :(得分:0)

我的MySQL并不好,但你需要做类似的事情:

$sql = "INSERT IGNORE INTO phpc_events (cid, owner, subject, description, ctime) 
SELECT '1', '1', title, description, start_tdate from at_courses"
left join phpc_event on phpc_events.cid = at_courses.cid //(and others you want matched for dups
where phpc_events.cid is null
;

答案 2 :(得分:0)

如果表格中有主键,则可以将INSERT替换为REPLACE。如果主键已存在,这将插入新记录或替换它们。

答案 3 :(得分:0)

通过添加UNIQUE约束来改变表

ALTER TABLE phpc_events ADD CONSTRAINT your_field UNIQUE (cid, owner, subject, description, ctime)