MySQL AUTO_INCREMENT z przykładami

Co to jest automatyczny przyrost?

Auto Increment to funkcja, która działa na typach danych numerycznych. Automatycznie generuje sekwencyjne wartości numeryczne za każdym razem, gdy rekord jest wstawiany do tabeli dla pola zdefiniowanego jako auto increment.

Kiedy używać automatycznego zwiększania?

Na lekcji o normalizacji baz danych przyjrzeliśmy się, jak można przechowywać dane przy minimalnej redundancji, przechowując dane w wielu małych tabelach, powiązanych ze sobą za pomocą kluczy podstawowych i obcych.

MySQL AUTO_INCREMENT z przykładami

Klucz podstawowy musi być unikalny, ponieważ jednoznacznie identyfikuje wiersz w bazie danych. Ale jak możemy się upewnić, że klucz podstawowy jest zawsze unikalny? Jednym z możliwych rozwiązań byłoby użycie formuły do ​​wygenerowania klucza podstawowego, która 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 upewnić się, że klucz podstawowy jest zawsze unikalny, możemy użyć MySQLFunkcja automatycznego zwiększania do generowania kluczy podstawowych. Automatyczne zwiększanie jest używane 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. Jako najlepszą praktykę zaleca się zdefiniowanie ograniczenia unsigned w kluczu podstawowym automatycznego zwiększania.

Składnia automatycznego zwiększania

Przyjrzyjmy się teraz skryptowi użytemu 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 id kategorii. Powoduje to automatyczne wygenerowanie identyfikatora kategorii za każdym razem, gdy do tabeli zostanie wstawiony nowy wiersz. Nie jest dostarczana przy wstawianiu danych do tabeli, MySQL generuje to.

Domyślnie wartość początkowa AUTO_INCREMENT wynosi 1 i będzie zwiększana o 1 dla każdego nowego rekordu

Przyjrzyjmy się aktualnej zawartości tabeli kategorii.

SELECT * FROM `categories`;

Wykonanie powyższego skryptu w MySQL workbench z myflixdb daje nam 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 MySQL Workbench 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

Uwaga: nie podaliśmy identyfikatora kategorii. MySQL automatycznie wygenerował go dla nas, ponieważ identyfikator kategorii jest zdefiniowany jako automatyczny przyrost.

Jeśli chcesz uzyskać ostatni identyfikator wkładki, który został wygenerowany przez MySQL, możesz w tym celu użyć funkcji LAST_INSERT_ID. Skrypt pokazany poniżej pobiera ostatni wygenerowany identyfikator.

SELECT LAST_INSERT_ID();

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

MySQL AUTO_INCREMENT

Podsumowanie

  • Atrybut automatycznego zwiększania wartości, gdy jest określony w kolumnie zawierającej typy danych liczbowych, generuje liczby sekwencyjnie za każdym razem, gdy do bazy danych dodawany jest nowy wiersz.
  • Przyrost automatyczny jest powszechnie używany do generowania kluczy podstawowych.
  • Zdefiniowany typ danych w opcji Auto inkrementacja powinien być wystarczająco duży, aby pomieścić wiele rekordów. Zdefiniowanie TINYINT jako typu danych dla pola automatycznego przyrostu ogranicza liczbę rekordów, które można dodać do tabeli tylko do 255, ponieważ wartości przekraczające tę wartość nie zostaną zaakceptowane przez typ danych TINYINT.
  • Uważa się, że dobrą praktyką jest określenie ograniczenia unsigned w kluczach podstawowych z funkcją autoinkrementacji, aby uniknąć występowania liczb ujemnych.
  • Po usunięciu wiersza z tabeli jego automatycznie zwiększany identyfikator nie jest ponownie używany. MySQL kontynuuje generowanie nowych numerów sekwencyjnie.
  • Domyślnie wartość początkowa AUTO_INCREMENT wynosi 1 i będzie zwiększana o 1 dla każdego nowego rekordu
  • Aby sekwencja AUTO_INCREMENT zaczynała się od innej wartości, użyj AUTO_INCREMENT = 10