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

MariaDB - INNODB pomijanie sekwencji numerów podczas tworzenia rekordów przyrostowych - dlaczego?

Mechanizm auto_increment jest wymagany do wygenerowania unikalnego wartości, które są większe niż jakakolwiek wartość wygenerowana wcześniej. Nie gwarantuje to wygenerowania kolejnego wartości.

Tu jest trochę dyskusji na ten temat:https://bugs.mysql.com/bug. php?id=57643

Wierne generowanie kolejnych wartości ma niewielkie znaczenie, ponieważ każda wartość może zostać „utracona” z innych powodów:

  • Wstawianie nie powiedzie się, na przykład z powodu naruszenia ograniczenia, takiego jak UNIQUE KEY lub FOREIGN KEY.
  • Wycofujesz transakcję dla INSERT.
  • Udało Ci się i zatwierdzenie, ale później wiersz zostaje USUNIĘTY przez Ciebie lub inną sesję.

Wartości Auto-inc nie są zwracane do żadnej kolejki, ponieważ inne współbieżne sesje mogły w międzyczasie wygenerować dalsze wartości identyfikatorów. Nie warto utrzymywać przez InnoDB puli nieprzydzielonych wartości identyfikatorów, ponieważ ta pula może stać się ogromna i marnotrawna.

Może być również właściwe „zgubienie” wartości identyfikatora, w przeciwnym razie ktoś pomyśli, że wiersz, który miał na celu USUNIĘCIE, w jakiś sposób powró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. Ponowne łączenie na serwerze MySQL przestało istnieć

  2. Uzyskaj wyniki, które mieszczą się w promieniach znaczników z bazy danych

  3. Dostęp do głównej tabeli Mysql w podzapytaniu połączonym z prawej strony

  4. Jak wyświetlić wiersze nieobecne w innej tabeli w MySQL?

  5. mysql_num_rows() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna w