Что может привести к дублированию идентификаторов на автоматическом приращении основного ключевого поля (mysql)?

RESOLVED

От разработчика: проблема заключалась в том, что предыдущая версия кода все еще писала на стол, которая использовала ручные идентификаторы вместо автоматического приращения. Примечание для себя: всегда проверяйте другие возможные места, где таблица написана.

Мы получаем дубликаты ключей в таблице. Они не вставляются в одно и то же время (с раздельным 6 часов). Структура таблицы

:

CREATE TABLE `table_1` (
  `sales_id` int(10) unsigned NOT NULL auto_increment,
  `sales_revisions_id` int(10) unsigned NOT NULL default '0',
  `sales_name` varchar(50) default NULL,
  `recycle_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`sales_id`),
  KEY `sales_revisions_id` (`sales_revisions_id`),
  KEY `sales_id` (`sales_id`),
  KEY `recycle_id` (`recycle_id`)
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ;

Вставка:

insert into `table_1` ( `sales_name` ) VALUES ( "Blah Blah" )

Мы запускаем MyS'L 5.0.20 с PHP5 и используем mysql_insert_id () для получения идентификатора вставки сразу после вставок запроса.

Ответ на: "Что может привести к дублированию идентификаторов на автоматическом приращении основного ключевого поля (mysql)?"

Количество ответов:6

Есть ли на sales_id поле первичный (или уникальный) ключ? Если нет, то что-то еще, вероятно, делает вставки или обновления, которые повторно используют существующие номера. И под "что-то еще" я имею в виду не только код; это может быть человек, доступ к базе данных делает это случайно.

  • Если у вас есть уникальный ключ на других полях, что может быть проблемой.

  • Если вы достигли наивысшего значения для вашего auto_increment колонке MyS'L будет продолжать пытаться повторно вставить его. Например, если sales_id был крошечный столбец, вы получите дублировать ключевые ошибки после достижения ID 127.

Как сказал другой; с вашим примером это невозможно.

Это не связано с вашим вопросом, но вам не нужно делать отдельный KEY для основной ключевой колонки - это просто добавление дополнительного не-уникального индекса в таблицу, когда у вас уже есть уникальный (первичный) ключ.

Мы получаем дубликаты ключей в таблице.

Вы имеете в виду вы получаете ошибки, как вы пытаетесь вставить, или вы имеете в виду у вас есть некоторые значения, хранящиеся в столбце более одного раза?

Автоматическое увеличение только ногами, когда вы опускаете столбец из вашего INSERT, или попытаться вставить NULL или ноль. В противном случае можно указать значение в заявлении INSERT, переверуя механизм автоматического приращения. Например:

INSERT INTO table_1 (sales_id) VALUES (26759);

Если указанное вами значение уже существует в таблице, вы получите ошибку.

У меня было несколько дубликат ключевых ошибок вдруг появляются в базах данных MySql в прошлом, хотя основной ключ определяется и auto_increment. Каждый раз это было потому, что таблица стала повреждена.

Если это повреждено выполнения таблиц проверки должны разоблачить проблему. Вы можете сделать это, запустив:

CHECK TABLE tbl_name

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

REPAIR TABLE tbl_name

Пожалуйста, наставу результаты этого запроса:

SELECT `sales_id`, COUNT(*) AS `num`
FROM `table_1`
GROUP BY `sales_id`
HAVING `num` > 1
ORDER BY `num` DESC