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

Защо MySQL autoincrement се увеличава при неуспешни вмъквания?

InnoDB е транзакционна машина.

Това означава, че в следния сценарий:

  1. Session A вмъква запис 1
  2. Session B вмъква запис 2
  3. Session A връща се назад

, има или възможност за пропуск или session B ще се заключи до session A ангажирани или отменени.

InnoDB дизайнерите (както повечето други дизайнери на транзакционни двигатели) избраха да допуснат пропуски.

От документацията :

При достъп до брояча за автоматично увеличение, InnoDB използва специален AUTO-INC на ниво таблица заключване, което запазва до края на текущия SQL изявление, а не до края на транзакцията. Специалната стратегия за освобождаване на заключване беше въведена за подобряване на едновременността за вмъквания в таблица, съдържаща AUTO_INCREMENT колона

InnoDB използва брояча за автоматично увеличение в паметта, докато сървърът работи. Когато сървърът е спрян и рестартиран, InnoDB повторно инициализира брояча за всяка таблица за първия INSERT към таблицата, както е описано по-рано.

Ако се страхувате от id колоната се обвива, направете я BIGINT (дълъг 8 байта).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете връзка в MySQL Workbench

  2. Как да получите записи от последните 7 дни в MySQL

  3. Как да получите няколко броя с една SQL заявка?

  4. Местоположение на файла my.cnf в macOS

  5. Как да използвам хеширане на пароли с PDO, за да направя кода си по-сигурен?