Kaj je samodejni prirastek?
Samodejni prirast je funkcija, ki deluje na številskih tipih podatkov. Samodejno generira zaporedne številske vrednosti vsakič, ko je zapis vstavljen v tabelo za polje, definirano kot samodejni prirastek.
Kdaj uporabiti samodejni prirastek?
V lekciji o normalizaciji zbirke podatkov smo preučili, kako je mogoče podatke shraniti z minimalno redundanco, tako da jih shranimo v številne majhne tabele, povezane med seboj s pomočjo primarnih in tujih ključev.
Primarni ključ mora biti enoličen, saj enolično identificira vrstico v zbirki podatkov. Kako pa lahko zagotovimo, da je primarni ključ vedno edinstven? Ena od možnih rešitev bi bila uporaba formule za generiranje primarnega ključa, ki v tabeli preveri obstoj ključa pred dodajanjem podatkov. To lahko deluje dobro, toda kot vidite, je pristop kompleksen in ni varen. Da bi se izognili takšni zapletenosti in zagotovili, da je primarni ključ vedno edinstven, lahko za ustvarjanje primarnih ključev uporabimo MySQL-jevo funkcijo Samodejni prirastek. Samodejni prirastek se uporablja s tipom podatkov INT. Podatkovni tip INT podpira podpisane in nepodpisane vrednosti. Nepodpisani podatkovni tipi lahko vsebujejo le pozitivna števila. Kot najboljša praksa je priporočljivo določiti nepodpisano omejitev na primarnem ključu samodejnega povečanja.
Sintaksa samodejnega povečanja
Poglejmo si zdaj skript, uporabljen za ustvarjanje tabele kategorij filmov.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Opazite "AUTO_INCREMENT" v polju category_id. Zaradi tega se ID kategorije samodejno generira vsakič, ko se v tabelo vstavi nova vrstica. Pri vstavljanju podatkov v tabelo ni na voljo, MySQL jih ustvari.
Privzeto je začetna vrednost za AUTO_INCREMENT 1 in se bo povečala za 1 za vsak nov zapis
Oglejmo si trenutno vsebino tabele kategorij.
SELECT * FROM `categories`;
Izvedba zgornjega skripta v delovnem okolju MySQL proti myflixdb nam da naslednje 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 |
Zdaj vstavimo novo kategorijo v tabelo kategorij.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Izvajanje zgornjega skripta proti myflixdb v delovnem okolju MySQL nam da naslednje rezultate, prikazane spodaj.
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 |
Upoštevajte, da nismo navedli ID-ja kategorije. MySQL ga je samodejno ustvaril za nas, ker je id kategorije definiran kot samodejni prirastek.
Če želite dobiti zadnji ID vstavka, ki ga je ustvaril MySQL, lahko za to uporabite funkcijo LAST_INSERT_ID. Spodnji scenarij dobi zadnji ID, ki je bil ustvarjen.
SELECT LAST_INSERT_ID();
Z izvajanjem zgornjega skripta dobite zadnjo številko samodejnega prirastka, ki jo ustvari poizvedba INSERT. Rezultati so prikazani spodaj.
Povzetek
- Atribut samodejnega prirasta, če je podan v stolpcu s številskimi podatkovnimi vrstami, zaporedno generira številke vsakič, ko je nova baza dodana v bazo podatkov.
- Samodejni prirastek se običajno uporablja za generiranje primarnih ključev.
- Določena vrsta podatkov na samodejnem prirastku mora biti dovolj velika, da sprejme veliko zapisov. Določitev TINYINT kot podatkovnega tipa za polje samodejnega prirastka omeji število zapisov, ki jih je mogoče dodati v tabelo, na 255 le, ker nobena vrednost, ki presega to, podatkovni tip TINYINT ne bi sprejel.
- Kot dobra praksa velja določiti nepodpisano omejitev na primarnih ključih s samodejnim priraščanjem, da se izognemo negativnim številkam.
- Ko vrstico izbrišete iz tabele, se njen samodejno priraščen ID ne uporabi več. MySQL še naprej zaporedno ustvarja nove številke.
- Privzeto je začetna vrednost za AUTO_INCREMENT 1 in se bo povečala za 1 za vsak nov zapis
- Če želite, da se zaporedje AUTO_INCREMENT začne z drugo vrednostjo, uporabite AUTO_INCREMENT = 10