Я не знаю, ожидаемое ли это поведение с INNODB
, но я действительно думаю, что это совершенно странно.
Если я использую тот же оператор SQL, используя MYISAM
, поведение происходит так, как ожидалось.
МАЙСАМ
CREATE TABLE main_database.numero (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id)
) ENGINE = MYISAM DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
INSERT INTO main_database.numero VALUES(NULL); -- First, run once time ...
INSERT INTO main_database.numero SELECT NULL FROM main_database.numero; -- After, more 12 times = 4096 records
Результат (ожидаемое поведение):
Однако теперь, если я использую точно такое же утверждение, сообщая, что двигатель INNODB
.
ИННОДБ
CREATE TABLE main_database.numero (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
INSERT INTO main_database.numero VALUES(NULL); -- First, run once time ...
INSERT INTO main_database.numero SELECT NULL FROM main_database.numero; -- After, more 12 times = 4096 records
Результат (странный результат — пропуск последовательности чисел):
На самом деле оба движка создают ожидаемые 4096 записей, но меня беспокоит поведение INNO
, потому что я переношу свои базы данных с MYISAM
на INNODB
и не знаю, насколько это может повлиять на мои приложения.
ALTER TABLE yourtable AUTO_INCREMENT=1;
. И это как-то позволяет избежать пробелов. Странная ошибка/особенность, если вы спросите меня. Вероятно, это связано с разницей в буферизации между двигателями. - person LukStorms   schedule 08.03.2019