KupueIIIKo
@KupueIIIKo

PDO после вставки одной и той же записи с одинаковым уникальным полем растет автоинкремент, в чем проблема?

Скармливаю запрос через prepare на вставку в таблицу. Дальше специально вставляю дублирующиеся записи раз 10 подряд! Ну с одинаковым email. Отлично в БД попадает одна запись. Но автоинкремент не 2 а уже 10. Почему так и как это исправить?
$ct = $pdo->prepare('INSERT INTO `users`(`email`, `pass`) VALUES (:email,:pass)');
		$result = $ct->execute(
			array(
				':email' => $params['email'],
				':pass'  => $params['pass'],
			)
		);
  • Вопрос задан
  • 675 просмотров
Решения вопроса 1
@AlikDex
недавно столкнулся с подобной проблемой, но в транзакциях. При INSERT IGNORE INTO получались большие пробелы в id'ах с автоинкрементом. Нагуглил в конфиг настройку для такого:
innodb_autoinc_lock_mode = 0
С этой опцией не повышается счетчик автоинкремента в транзакциях при использовании уникального индекса, попробуйте, может получится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Патамушта.


Результаты могут показаться противоестественным, потому что ряд AUTO_INCREMENT значений вычисляется без учета каких-либо значений, уже присутствующими в колонне, и последующее значение вставлена ​​наименьшее значение в серии, который больше, чем максимальный существующее значение в AUTO_INCREMENT колонке. Другими словами, серия рассчитывается следующим образом:

auto_increment_offset + N × auto_increment_increment

где N является положительным целым числом, значение в серии [1, 2, 3, ...].


Номер ячейки уникален? Уникален. А значит все верно:

Атрибут AUTO_INCREMENT может использоваться для генерации уникального идентификатора для новых строк


А хотите четкий порядок, назначайте id , исходя из
COUNT(*)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ну 10, и что? Уже имеющаяся запись своего id не меняет, так? Этого вполне достаточно, чтобы id были уникальными, а непрерывность значений колонки с AUTO_INCREMENT никто и не гарантирует.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы