2010-12-06 3 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

ok, у меня есть первичный ключ, и это идентификатор, который является автоматически увеличивающимся, но это будет изменение для каждой записи. – 2010-12-06 08:30:22

1

Если причина, по которой вы не хотите использовать первичные ключи или уникальные индексы, из-за ошибки, которая будет сгенерирована (что является проблемой, если вы вставляете несколько строк по одному запросу), вы можете использовать следующие синтаксис

insert ignore into [tablename]() VALUES() 

Вы также можете использовать дублирование 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' 
    ); 
Смежные вопросы