2010-12-06 102 views
0

我总是插入数据到一个mysql表中,我使用插入前的数据选择,以避免重复记录,如果查询返回null然后我插入记录。如何防止在mysql插入查询中复制记录?

但我想也许这不是一个专业的方式来完成这项工作。

你会让我这样做吗?

+0

添加适当的约束作为已经建议通常是一个很好的路要走,但如果由于某种原因,不适合,你可以尝试一个条件插入(基本上你现在正在做什么,但所有在一个声明):http://stackoverflow.com/questions/2852935/sql-conditional-row-insert – Mike 2010-12-06 08:38:58

+0

谢谢迈克,但是当我运行这样的条件使用WHERE NOT EXISTS语句查询mysql给我一个语法错误。 – 2010-12-06 08:58:18

回答

0

执行此操作的“专业”方式将使用主键约束。

+0

好吧,我有一个主键,这是一个ID是自动增量,但它会被更改为每个记录 – 2010-12-06 08:30:22

1

如果您不希望使用主键或唯一索引的原因是由于会生成错误(如果您在单个查询中插入多行),您可以使用以下语法

insert ignore into [tablename]() VALUES() 

您也可以使用ON DUPLICATE KEY UPDATE来更新某些字段。

insert into [tablename]() VALUES() ON DUPLICATE KEY UPDATE 

了解更多信息,看看http://dev.mysql.com/doc/refman/5.1/en/insert.html

0
$qry="INSERT username INTO users"; 
if(!mysql_query($qry)) 
{ 
    if(mysql_errno()=1062) 
    { 
    echo 'Unique costraint violation!'; 
    } 
    else 
    { 
    //other error 
    } 
} 
0
You can try the following example. I would suggest you to try this first in your testing environment then you can implement this in your actual scenario. 

Follow the below steps: 

Step 1: create a table 

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(30) NOT NULL, 
    `email` varchar(50) NOT NULL, 
    `password` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 


Step 2: Run this query multiple times and check that only one row is inserted 

INSERT INTO `student` (`name`, `age`) 
SELECT `name`, `age` FROM `student` 
WHERE NOT EXISTS (SELECT 1 
    FROM `student` 
    WHERE `name` = 'manish' 
    AND `age` = '23' 
    );