Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego wartość autoinkrementacji MySQL zwiększa się w przypadku nieudanych operacji wstawiania?

InnoDB to silnik transakcyjny.

Oznacza to, że w następującym scenariuszu:

  1. Session A wstawia rekord 1
  2. Session B wstawia rekord 2
  3. Session A cofa się

, istnieje możliwość przerwy lub session B zablokuje się do session A zatwierdzone lub wycofane.

InnoDB projektanci (jak większość innych projektantów silników transakcyjnych) postanowili uwzględnić luki.

Z dokumentacji :

Podczas uzyskiwania dostępu do licznika automatycznego przyrostu, InnoDB używa specjalnego AUTO-INC na poziomie tabeli blokada, którą utrzymuje do końca bieżącego SQL oświadczenie, a nie do końca transakcji. Wprowadzono specjalną strategię zwalniania blokad, aby poprawić współbieżność dla wstawek do tabeli zawierającej AUTO_INCREMENT kolumna

InnoDB używa licznika automatycznego przyrostu w pamięci tak długo, jak działa serwer. Gdy serwer zostanie zatrzymany i zrestartowany, InnoDB ponownie inicjuje licznik dla każdej tabeli dla pierwszego INSERT do tabeli, jak opisano wcześniej.

Jeśli boisz się id zawijanie kolumn dookoła, zrób to BIGINT (8-bajtów długości).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie LIKE w bindParam dla zapytania MySQL PDO

  2. Jak zmienić domyślny katalog danych MySQL/MariaDB w systemie Linux?

  3. Jak obliczyć procentowy wzrost z tygodnia na tydzień w MySQL?

  4. Jak importować / przywracać tabele MySql za pomocą PHP

  5. Jak działa funkcja LOCATE() w MySQL