Mis on automaatne juurdekasv?
Automaatne juurdekasv on funktsioon, mis töötab arvandmetüüpidel. See genereerib automaatselt järjestikused arvväärtused iga kord, kui kirje sisestatakse tabelisse väljale, mis on määratletud automaatse juurdekasvuna.
Kui kasutada automaatset juurdekasvu?
Andmebaasi normaliseerimise tunnis vaatasime, kuidas andmeid saab säilitada minimaalse üleliigsusega, salvestades andmeid paljudesse väikestesse tabelitesse, mis on omavahel seotud primaar- ja võõrvõti kasutades.
Esmane võti peab olema kordumatu, kuna see identifitseerib andmebaasi rea ainulaadselt. Kuid kuidas saaksime tagada, et esmane võti oleks alati ainulaadne? Üks võimalikest lahendustest oleks enne andmete lisamist esmase võtme genereerimiseks valem, mis kontrollib tabelis võtme olemasolu. See võib hästi töötada, kuid nagu näete, on lähenemine keeruline ja mitte lollikindel. Sellise keerukuse vältimiseks ja primaarvõtme alati unikaalsuse tagamiseks võime primaarvõtmete genereerimiseks kasutada MySQL-i funktsiooni Automaatne juurdekasv. Automaatne juurdekasv kasutatakse INT andmetüübiga. INT andmetüüp toetab nii allkirjastatud kui ka allkirjastamata väärtusi. Allkirjastamata andmetüübid võivad sisaldada ainult positiivseid arve. Parima tavana on soovitatav määratleda automaatse juurdekasvu esmase võtme allkirjastamata piirang.
Automaatse juurdekasvu süntaks
Vaatame nüüd filmi kategooriate tabeli loomiseks kasutatud skripti.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Pange tähele väljal category_id märget "AUTO_INCREMENT". Selle tulemusel luuakse kategooria Id automaatselt iga kord, kui tabelisse lisatakse uus rida. Andmeid tabelisse sisestamisel seda ei tarnita, MySQL genereerib need.
Vaikimisi on AUTO_INCREMENT algväärtus 1 ja see suureneb iga uue kirje puhul 1 võrra
Uurime kategooriate tabeli praegust sisu.
SELECT * FROM `categories`;
Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb-ga annab meile järgmised tulemused.
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 |
Lisame nüüd kategooriate tabelisse uue kategooria.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Ülaltoodud skripti käivitamine MySQL-i töölaua Myflixdb vastu annab meile järgmised tulemused.
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 |
Pange tähele, et me ei esitanud kategooria ID-d. MySQL genereeris selle meile automaatselt, kuna kategooria ID on määratletud kui automaatne kasv.
Kui soovite saada viimase MySQL-i loodud sisetunnuse, võite selleks kasutada funktsiooni LAST_INSERT_ID. Allpool toodud skript saab viimase loodud ID.
SELECT LAST_INSERT_ID();
Ülaltoodud skripti käivitamine annab päringu INSERT genereeritud viimase automaatse juurdekasvu numbri. Tulemused on toodud allpool.
Kokkuvõte
- Automaatse juurdekasvu atribuut, kui see on määratud arvandmetüüpidega veerus, genereerib järjestikku numbreid, kui andmebaasi lisatakse uus rida.
- Automaatse juurdekasvu kasutatakse tavaliselt primaarvõtmete genereerimiseks.
- Automaatse juurdekasvu määratletud andmetüüp peaks olema piisavalt suur, et mahutada palju kirjeid. TINYINT-i määratlemine automaatse juurdekasvu välja andmetüübina piirab tabelisse lisatavate kirjete arvu 255-ni, kuna TINYINT-andmetüüp ei aktsepteeri muid väärtusi, mis ületavad seda.
- Negatiivsete arvude vältimiseks peetakse heaks tavaks määrata automaatse juurdekasvu primaarvõtmete allkirjastamata piirang.
- Kui rida tabelist kustutatakse, ei kasutata selle automaatselt suurendatud ID-d uuesti. MySQL jätkab järjest uute numbrite genereerimist.
- Vaikimisi on AUTO_INCREMENT algväärtus 1 ja see suureneb iga uue kirje puhul 1 võrra
- Kui soovite, et järjestus AUTO_INCREMENT alustaks teist väärtust, kasutage AUTO_INCREMENT = 10