我总是插入数据到一个mysql表中,我使用插入前的数据选择,以避免重复记录,如果查询返回null然后我插入记录。如何防止在mysql插入查询中复制记录?
但我想也许这不是一个专业的方式来完成这项工作。
你会让我这样做吗?
我总是插入数据到一个mysql表中,我使用插入前的数据选择,以避免重复记录,如果查询返回null然后我插入记录。如何防止在mysql插入查询中复制记录?
但我想也许这不是一个专业的方式来完成这项工作。
你会让我这样做吗?
执行此操作的“专业”方式将使用主键约束。
好吧,我有一个主键,这是一个ID是自动增量,但它会被更改为每个记录 – 2010-12-06 08:30:22
如果您不希望使用主键或唯一索引的原因是由于会生成错误(如果您在单个查询中插入多行),您可以使用以下语法
insert ignore into [tablename]() VALUES()
您也可以使用ON DUPLICATE KEY UPDATE来更新某些字段。
insert into [tablename]() VALUES() ON DUPLICATE KEY UPDATE
$qry="INSERT username INTO users";
if(!mysql_query($qry))
{
if(mysql_errno()=1062)
{
echo 'Unique costraint violation!';
}
else
{
//other error
}
}
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'
);
添加适当的约束作为已经建议通常是一个很好的路要走,但如果由于某种原因,不适合,你可以尝试一个条件插入(基本上你现在正在做什么,但所有在一个声明):http://stackoverflow.com/questions/2852935/sql-conditional-row-insert – Mike 2010-12-06 08:38:58
谢谢迈克,但是当我运行这样的条件使用WHERE NOT EXISTS语句查询mysql给我一个语法错误。 – 2010-12-06 08:58:18