SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.11.2011 13:46:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Непонятная работа auto_increment для innodb таблицы

mysql> create table temp (id int not null auto_increment primary key) engine=innodb;
Query OK, 0 rows affected (0.14 sec)

mysql> insert into temp values(null),(null);
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)

mysql> insert into temp select null from temp;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

mysql> insert into temp select null from temp;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  6 |
|  7 |
|  8 |
|  9 |
+----+
8 rows in set (0.02 sec)


Почему пропущено значение 5?

Неактивен

 

#2 03.11.2011 13:51:08

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Непонятная работа auto_increment для innodb таблицы

Воспроизвелось.

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.57    |
+-----------+
1 row in set (0.00 sec)

Centos 5.5.

На bugs.mysql.com, думаю, надо закинуть этот пример.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 03.01.2014 22:26:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Непонятная работа auto_increment для innodb таблицы

Не прошло и пары лет (точнее прошло) как разобрался smile

Это не ошибка, а оптимизация вставки для innodb таблиц, введенная с версии MySQL 5.1.22
http://dev.mysql.com/doc/refman/5.1/en/ … dling.html

Для традиционного поведения (без пробелов) нужно выставить переменную innodb_autoinc_lock_mode = 0

Неактивен

 

#4 03.01.2014 23:34:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Непонятная работа auto_increment для innodb таблицы

Документация строго говоря это поведение не описывает, хотя и допускает такую возможность.

innodb_autoinc_lock_mode = 0 действительно устраняет пропуски нумерации при вставке.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson