MySQL AUTO_INCREMENT s primjerima

Što je automatsko povećanje?

Automatsko povećanje je funkcija koja radi s numeričkim tipovima podataka. Automatski generira sekvencijalne numeričke vrijednosti svaki put kada se zapis umetne u tablicu za polje definirano kao automatsko povećanje.

Kada koristiti automatsko povećanje?

U lekciji o normalizaciji baze podataka, pogledali smo kako se podaci mogu pohraniti uz minimalnu redundanciju, pohranjivanjem podataka u mnogo malih tablica, međusobno povezanih korištenjem primarnih i stranih ključeva.

MySQL AUTO_INCREMENT s primjerima

Primarni ključ mora biti jedinstven jer jedinstveno identificira red u bazi podataka. Ali, kako možemo osigurati da je primarni ključ uvijek jedinstven? Jedno od mogućih rješenja bilo bi korištenje formule za generiranje primarnog ključa, koja provjerava postojanje ključa u tablici prije dodavanja podataka. Ovo može dobro funkcionirati, ali kao što vidite pristup je složen i nije siguran. Kako bismo izbjegli takvu složenost i osigurali da je primarni ključ uvijek jedinstven, možemo koristiti MySQLZnačajka automatskog povećanja za generiranje primarnih ključeva. Automatsko povećanje koristi se s INT tipom podataka. Tip podataka INT podržava i predpisane i nepredpisane vrijednosti. Nepotpisani tipovi podataka mogu sadržavati samo pozitivne brojeve. Kao najbolja praksa, preporučuje se definiranje nepotpisanog ograničenja na primarnom ključu automatskog povećanja.

Sintaksa automatskog povećanja

Pogledajmo sada skriptu korištenu za izradu tablice kategorija filmova.

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

Primijetite "AUTO_INCREMENT" na polju category_id. To uzrokuje da se ID kategorije automatski generira svaki put kada se u tablicu umetne novi redak. Ne isporučuje se prilikom umetanja podataka u tablicu, MySQL generira ga.

Prema zadanim postavkama, početna vrijednost za AUTO_INCREMENT je 1, a povećavat će se za 1 za svaki novi zapis

Pogledajmo trenutni sadržaj tablice kategorija.

SELECT * FROM `categories`;

Izvršavanje gornje skripte u MySQL workbench u odnosu na myflixdb daje nam sljedeće rezultate.

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

Umetnimo sada novu kategoriju u tablicu kategorija.

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

Izvršavanje gornje skripte protiv myflixdb in MySQL radna tezga daje nam sljedeće rezultate prikazane u nastavku.

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

Imajte na umu da nismo naveli ID kategorije. MySQL automatski ga je generirao za nas jer je ID kategorije definiran kao automatsko povećanje.

Ako želite dobiti zadnji ID umetanja koji je generirao MySQL, za to možete koristiti funkciju LAST_INSERT_ID. Skripta prikazana u nastavku dobiva zadnji ID koji je generiran.

SELECT LAST_INSERT_ID();

Izvršavanje gornje skripte daje zadnji broj automatskog povećanja generiran upitom INSERT. Rezultati su prikazani u nastavku.

MySQL AUTO_INCREMENT

Rezime

  • Atribut automatskog povećanja kada je naveden u stupcu s numeričkim tipovima podataka, generira brojeve uzastopno kad god se novi redak doda u bazu podataka.
  • Automatski inkrement obično se koristi za generiranje primarnih ključeva.
  • Definirana vrsta podataka na Auto inkrementu trebala bi biti dovoljno velika da primi mnogo zapisa. Definiranje TINYINT kao tipa podataka za polje s automatskim povećanjem ograničava broj zapisa koji se mogu dodati u tablicu samo na 255 budući da sve vrijednosti izvan toga ne bi bile prihvaćene od strane TINYINT tipa podataka.
  • Smatra se dobrom praksom navesti ograničenje bez predznaka na primarnim ključevima s automatskim povećanjem kako bi se izbjegli negativni brojevi.
  • Kada se redak izbriše iz tablice, njegov automatski inkrementirani ID ne koristi se ponovno. MySQL nastavlja sekvencijalno generiranje novih brojeva.
  • Prema zadanim postavkama, početna vrijednost za AUTO_INCREMENT je 1, a povećavat će se za 1 za svaki novi zapis
  • Kako biste dopustili nizu AUTO_INCREMENT započeti drugom vrijednošću, upotrijebite AUTO_INCREMENT = 10