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

Защо mysql пропуска някои идентификатори за автоматично увеличение?

Това е пример за автоматично заключване на инкремент в InnoDB:Тъй като изпълнявате 2 оператора едновременно в една и съща сесия:автоматичното включване се получава от първата заявка, а генерирането на стойност за автоматично увеличение не се преплита между операторите - това е цялата работа на транзакцията.

Това винаги ще се случва по замисъл:Ако не беше така, начинът, по който работят транзакциите в InnoDB, добре, нямаше да работи. Мащабируемостта при натоварвания от типа OLTP би била ужасна, тъй като всяка вмъкнала би трябвало да изчака всяка друга вмъкване да завърши, да бъде ангажирана или по-лошо – да се върне обратно.

Т.е.:Ако първото ви вмъкване работи 5 пъти по-дълго от второто и се провали и бъде върнато назад, второто все още завършва и е заето. В противен случай ще трябва да изчакате ea. заявката да бъде завършена след другата.

Ако имате нужда от последователни и абсолютно уникални идентификационни номера, изтеглете ги от друг източник. Колоните на AutoInc просто гарантират уникална стойност - не непременно монопоследователност - това е точка на сериализация и пречка.

Един начин за заобикаляне на това, ако се изисква друго:

задайте innodb_autoinc_lock_mode = 0 във вашия my.cnf/mysql.ini

Описание на автоматично заключване на включване в 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. php четене на mysql битово поле, връщащо странен символ

  2. MySQL формати за дата - трудност Вмъкване на дата

  3. Сървърът не отговаря (или сокетът на локалния MySQL сървър не е конфигуриран правилно) в wamp сървър

  4. Актуализирайте колона в MySQL

  5. EF Core 2.0 Identity – Добавяне на свойства за навигация