MySQL AUTO_INCREMENT z przykładami

Anonim

Co to jest automatyczna inkrementacja?

Auto Increment to funkcja działająca na liczbowych typach danych. Automatycznie generuje sekwencyjne wartości liczbowe za każdym razem, gdy rekord jest wstawiany do tabeli dla pola zdefiniowanego jako automatyczna inkrementacja.

Kiedy używasz automatycznego zwiększania?

W lekcji na temat normalizacji bazy danych przyjrzeliśmy się, jak można przechowywać dane z minimalną redundancją, przechowując dane w wielu małych tabelach powiązanych ze sobą za pomocą kluczy podstawowych i obcych.

Klucz podstawowy musi być unikatowy, ponieważ jednoznacznie identyfikuje wiersz w bazie danych. Ale w jaki sposób możemy zapewnić, że klucz podstawowy jest zawsze niepowtarzalny? Jednym z możliwych rozwiązań byłoby użycie formuły do ​​generowania klucza podstawowego, który sprawdza istnienie klucza w tabeli przed dodaniem danych. Może to działać dobrze, ale jak widać, podejście jest złożone i nie jest niezawodne. Aby uniknąć takiej złożoności i zapewnić, że klucz podstawowy jest zawsze unikalny, możemy użyć funkcji Autoinkrement MySQL do generowania kluczy głównych. Autoinkrementacja jest używana z typem danych INT. Typ danych INT obsługuje zarówno wartości ze znakiem, jak i bez znaku. Typy danych bez znaku mogą zawierać tylko liczby dodatnie. Zaleca się zdefiniowanie ograniczenia bez znaku w kluczu podstawowym z automatycznym zwiększaniem wartości.

Składnia automatycznego inkrementacji

Przyjrzyjmy się teraz skryptowi używanemu do utworzenia tabeli kategorii filmów.

CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));

Zwróć uwagę na „AUTO_INCREMENT” w polu category_id. Powoduje to automatyczne generowanie identyfikatora kategorii za każdym razem, gdy do tabeli zostanie wstawiony nowy wiersz. Nie jest podawany podczas wstawiania danych do tabeli, MySQL je generuje.

Domyślnie wartością początkową dla AUTO_INCREMENT jest 1 i będzie ona zwiększana o 1 dla każdego nowego rekordu

Przyjrzyjmy się aktualnej zawartości tabeli kategorii.

SELECT * FROM `categories`;

Wykonanie powyższego skryptu w środowisku roboczym MySQL na myflixdb daje następujące wyniki.

 
category_id category_name remarks
1 Comedy Movies with humour
2 Romantic Love stories
3 Epic Story acient movies
4 Horror NULL
5 Science Fiction NULL
6 Thriller NULL
7 Action NULL
8 Romantic Comedy NULL

Wstawmy teraz nową kategorię do tabeli kategorii.

INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');

Wykonanie powyższego skryptu na myflixdb w środowisku roboczym MySQL daje nam następujące wyniki pokazane poniżej.

 
category_id category_name remarks
1 Comedy Movies with humour
2 Romantic Love stories
3 Epic Story acient movies
4 Horror NULL
5 Science Fiction NULL
6 Thriller NULL
7 Action NULL
8 Romantic Comedy NULL
9 Cartoons NULL

Pamiętaj, że nie podaliśmy identyfikatora kategorii. MySQL automatycznie wygenerował go dla nas, ponieważ identyfikator kategorii jest zdefiniowany jako automatyczna inkrementacja.

Jeśli chcesz uzyskać ostatni identyfikator wstawiania, który został wygenerowany przez MySQL, możesz użyć do tego funkcji LAST_INSERT_ID. Poniższy skrypt pobiera ostatni wygenerowany identyfikator.

SELECT LAST_INSERT_ID();

Wykonanie powyższego skryptu daje ostatni numer automatycznego inkrementacji wygenerowany przez zapytanie INSERT. Wyniki przedstawiono poniżej.

Podsumowanie

  • Atrybut automatycznego zwiększania wartości określony w kolumnie z numerycznymi typami danych generuje liczby sekwencyjnie za każdym razem, gdy do bazy danych dodawany jest nowy wiersz.
  • Automatyczny przyrost jest powszechnie używany do generowania kluczy podstawowych.
  • Zdefiniowany typ danych w Autoinkrementacji powinien być wystarczająco duży, aby pomieścić wiele rekordów. Zdefiniowanie TINYINT jako typu danych dla pola automatycznego inkrementacji ogranicza liczbę rekordów, które można dodać do tabeli tylko do 255, ponieważ inne wartości nie byłyby akceptowane przez typ danych TINYINT.
  • Uważa się, że dobrą praktyką jest określenie ograniczenia bez znaku dla kluczy podstawowych z automatyczną inkrementacją, aby uniknąć liczb ujemnych.
  • Kiedy wiersz jest usuwany z tabeli, jego automatycznie zwiększany identyfikator nie jest ponownie używany. MySQL kontynuuje sekwencyjne generowanie nowych numerów.
  • Domyślnie wartością początkową dla AUTO_INCREMENT jest 1 i będzie ona zwiększana o 1 dla każdego nowego rekordu
  • Aby sekwencja AUTO_INCREMENT zaczęła się od innej wartości, użyj AUTO_INCREMENT = 10