Не работает auto_increment

Andir

Новичок
Здравствуйте, при выполнении запроса на удаление записи из БД не происходит увеличение auto_increment поля id, а если удаляю запись вручную через phpmyadmin - auto_increment поля id увеличивается. Код удаления :
Код:
     $sqlDeleteInformation = $this->connectDB->prepare("DELETE from information where id = ?");
     $sqlDeleteInformation->bindParam(1, $tournamentId, PDO::PARAM_INT);
     $sqlDeleteInformation->execute();
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Как это блин увеличивается? Нихрена там увеличиваться не должно.
 

Adelf

Administrator
Команда форума
инкремент увеличивается только при вставке строк
 

Andir

Новичок
Как это блин увеличивается? Нихрена там увеличиваться не должно.
id - уникальное auto_increment поле, если я удаляю запись - новая добавляемая запись не должна иметь id ранее удаленной записи. В моем случаи когда я удаляю запись - новая запись имеет id ранее удаленной записи, а когда удаляю вручную через phpmyadmin - новая запись имеет уникальный id.
 

Adelf

Administrator
Команда форума
ну бывают приколы конечно... но врядли это тот случай :)
 

Adelf

Administrator
Команда форума
@Andir, когда ты вставил запись.. следующая созданная уже будет иметь следующий id. вне зависимости удалил ты или не удалил
 

Andir

Новичок
ну бывают приколы конечно... но врядли это тот случай :)
Как-то странно получилось) Уже все нормально работает, до этого реально работало как я писал. Может все произошло из-за смены БД, вчера на хостинге стояла MariaDB, сейчас уже стоит обычный MySql. Спасибо всем. за ответы.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну да, конечно, мария она глюююючная, аж кашмар. Закрыто. :D
 

Andir

Новичок
Хотя нет, опять все слетело.
Добавляю запись
Добавилась запись c id = 31

Удаляю запись c id = 31
После удаления

Через пару минут обновляю phpmyadmin и следующий автоматический индекс слетает до 29
 

Andir

Новичок
Мне тут подсказали что:
Всё работает согласно Правилам.
Для innodb при запуске движка auto_increment = max(id).
Т.е. не важно какой auto_increment в данный момент, после перезапуска движка он установится равным max(field). Некоторые операции также могут по тихому "сбрасывать" auto_increment.
Есть такая особенность у innodb.
 

Вурдалак

Продвинутый новичок
Мне тут подсказали что:
Всё работает согласно Правилам.
Для innodb при запуске движка auto_increment = max(id).
Т.е. не важно какой auto_increment в данный момент, после перезапуска движка он установится равным max(field). Некоторые операции также могут по тихому "сбрасывать" auto_increment.
Есть такая особенность у innodb.
Это баг, а не «особенность». id должен быть всегда уникальным, в противном случае в системе могут быть проблемы в определении того были ли данные связаны с удалённой сущностью или же с новой.
 

Вурдалак

Продвинутый новичок
https://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-traditional.html
При старте сервера это действительно считается нормальным:
InnoDB uses the in-memory auto-increment counter as long as the server runs. When the server is stopped and restarted, InnoDB reinitializes the counter for each table for the first INSERT to the table, as described earlier.
Получается, твой MySQL-сервер регулярно рестартуется?
 

Andir

Новичок
https://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-traditional.html
При старте сервера это действительно считается нормальным:


Получается, твой MySQL-сервер регулярно рестартуется?
Сайт стоит на обычном хостинге, в последнее время сервер хостинга часто дедосят, поэтому скорее всего сервер часто перезагружают.
 

Adelf

Administrator
Команда форума
Если забыть foreign ключи и в коде забыть удалить связи, можно словить нехилый такой фейл.

Да и логи могут быть непонятными... Кто мог такое придумать?
 
Сверху