Как предотвратить дублирование записей в запросах вставки MySQL? - PullRequest
0 голосов
/ 06 декабря 2010

Я всегда вставляю данные в таблицу MySQL. Я использую выбор для этих данных перед вставкой, чтобы избежать дублирования записей, и если запрос возвращает ноль, тогда я вставляю запись.

, но я думаю, что это непрофессиональный способ сделать эту работу.

Вы бы позволили мне, как вы делаете?

Ответы [ 4 ]

1 голос
/ 06 декабря 2010

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

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 голосов
/ 19 июля 2013
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'
    );
0 голосов
/ 15 ноября 2012
$qry="INSERT username INTO users";
if(!mysql_query($qry))
{
  if(mysql_errno()=1062)
  {
    echo 'Unique costraint violation!';
  }
  else
  {
    //other error
  }
}
0 голосов
/ 06 декабря 2010

«Профессиональный» способ сделать это - использовать ограничение первичного ключа.

...