W zależności od używanej wersji SQL mode, MySQL wykonuje jedną z dwóch czynności, gdy wartość kolumny numerycznej AUTO_INCREMENT
rośnie poza zakres. W obu przypadkach pojawia się błąd, ale z różnych powodów.
W trybie ścisłym MySQL odrzuca Spośród wartości zakresu, zgłasza błąd nieprawidłowej wartości, a INSERT
zawiedzie. W domyślnym trybie nieostrym MySQL zmniejsza wartość do najwyższej dozwolonej dla typu danych i wykonuje INSERT
. Ale INSERT
zawiedzie, ponieważ atrybut AUTO_INCREMENT
spowodował wszystkich możliwych wartości do już stosowanych, a otrzymasz ten błąd (unsigned SMALLINT
przykład):
MySQL said:
#1062 - Duplicate entry '65535' for key 1
Dla przykładu BIGINT
tu wymienić „65535” z 18 kwintillionów, chociaż nie wydaje się prawdopodobne, aby błąd wystąpił kiedykolwiek w produkcyjnej bazie danych.
Ale z TINYINT
s i SMALLINT
s może się zdarzyć bardzo łatwo, jeśli nie docenisz możliwych wartości klucza (liczba INSERT
s) w całym okresie życia aplikacji. Wyobraź sobie, że wprowadzasz zmiany w kodzie i testujesz poprawność wstawiania danych. Nagle Twoja aplikacja przestaje działać z powyższym błędem. Przywracasz zmiany do znanego dobrego kodu, ale błąd nie zniknie ... bardzo frustruje.
Ok. Nie sądzę, że moja aplikacja potrwa tak długo => 500 lat. – ashitaka
Podobnie, jeśli wstawisz tylko raz na sekundę, Twoja aplikacja będzie działać przez 68 lat z 32-bitową intacją. Zaoszczędź 4-bajty na rekord i użyj 32-bitowego int, jeśli możesz. – jmucchiello
Po drugie. Są rzeczy, które wymagają większej ostrożności przy budowaniu bazy danych. – Tomalak