Mysql
 sql >> база данни >  >> RDS >> Mysql

MariaDB - INNODB пропускане на последователността от числа при създаване на инкрементални записи - защо?

Механизмът auto_increment е необходим за генериране на уникален стойности, които са по-големи от всяка стойност, генерирана преди това. Това не гарантира генерирането на последователни стойности.

Тук има дискусия за това:https://bugs.mysql.com/bug. php?id=57643

Прецизното генериране на последователни стойности е малко важно, защото всяка стойност може да бъде „загубена“ по други причини:

  • Вашият INSERT е неуспешен, например поради нарушаване на ограничение като UNIQUE KEY или FOREIGN KEY.
  • Вие отменяте транзакцията за вашия INSERT.
  • Успявате и се ангажирате, но по-късно редът е ИЗТРИТ от вас или друга сесия.

Стойностите за автоматично включване не се връщат към какъвто и да е вид опашка, тъй като други едновременни сесии може да са генерирали допълнителни стойности на идентификатор междувременно. Не си струва InnoDB да поддържа пул от неразпределени идентификационни стойности, защото този пул може да стане огромен и разточителен.

Освен това може да е подходящо да се „загуби“ стойност на идентификатора, в противен случай някой би си помислил, че редът, който искаха да ИЗТРИХАТ, някак си се върна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL / MySQL - Подреждане по дължина на колоната

  2. MySQL Вмъкване в множество таблици? (Нормализация на базата данни?)

  3. Laravel 4 конструктор на заявки - със сложни леви съединения

  4. Как да използвате пагинация с laravel DB::select заявка

  5. Вмъкване на данни от друга таблица с цикъл в mysql