Kas yra automatinis prieaugis?
„Auto Increment“ yra funkcija, veikianti pagal skaitmeninius duomenų tipus. Jis automatiškai generuoja nuoseklias skaitines reikšmes kiekvieną kartą, kai įrašas įterpiamas į lauko, apibrėžto kaip automatinis prieaugis, lentelę.
Kada naudoti automatinį prieaugį?
Duomenų bazės normalizavimo pamokoje mes apžvelgėme, kaip galima saugoti duomenis su minimaliu pertekliniu poreikiu, saugant duomenis daugelyje mažų lentelių, susijusių tarpusavyje naudojant pirminius ir svetimus raktus.
Pagrindinis raktas turi būti unikalus, nes jis unikaliai identifikuoja eilutę duomenų bazėje. Bet kaip mes galime užtikrinti, kad pagrindinis raktas visada būtų unikalus? Vienas iš galimų sprendimų būtų naudoti formulę pirminiam raktui generuoti, kuris patikrina, ar lentelėje yra raktas, prieš pridedant duomenis. Tai gali gerai pasiteisinti, tačiau, kaip matote, požiūris yra sudėtingas ir neužtikrinamas. Norėdami išvengti tokio sudėtingumo ir užtikrinti, kad pagrindinis raktas visada yra unikalus, pirminiams raktams generuoti galime naudoti „MySQL“ automatinio prieaugio funkciją. Automatinis prieaugis naudojamas su INT duomenų tipu. INT duomenų tipas palaiko tiek pasirašytas, tiek nepasirašytas reikšmes. Nepasirašytuose duomenų tipuose gali būti tik teigiami skaičiai. Kaip geriausią praktiką rekomenduojama apibrėžti pirminio automatinio prieaugio rakto nepasirašytą apribojimą.
Automatinio prieaugio sintaksė
Dabar pažvelkime į scenarijų, naudojamą kuriant filmų kategorijų lentelę.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Atkreipkite dėmesį į lauką „category_id“ „AUTO_INCREMENT“. Tai reiškia, kad kategorijos ID automatiškai sugeneruojamas kiekvieną kartą, kai į lentelę įterpiama nauja eilutė. Jis nepateikiamas įterpiant duomenis į lentelę, „MySQL“ juos sugeneruoja.
Pagal numatytuosius nustatymus pradinė AUTO_INCREMENT vertė yra 1 ir ji padidės 1 kiekvienam naujam įrašui
Panagrinėkime dabartinį kategorijų lentelės turinį.
SELECT * FROM `categories`;
Minėto scenarijaus vykdymas „MySQL“ darbastalyje prieš „myflixdb“ suteikia mums šiuos rezultatus.
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 |
Dabar į kategorijų lentelę įterpkime naują kategoriją.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Minėto scenarijaus vykdymas naudojant „MySQL“ darbastalyje esantį „myflixdb“ suteikia mums šiuos rezultatus.
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 |
Atminkite, kad nepateikėme kategorijos ID. „MySQL“ jį automatiškai sugeneravo mums, nes kategorijos ID apibrėžiamas kaip automatinis prieaugis.
Jei norite gauti paskutinį „MySQL“ sugeneruotą įterpimo ID, galite tai padaryti naudodami funkciją LAST_INSERT_ID. Žemiau pateiktas scenarijus gauna paskutinį sugeneruotą ID.
SELECT LAST_INSERT_ID();
Vykdant pirmiau pateiktą scenarijų, gaunamas paskutinis automatinio prieaugio numeris, kurį sugeneravo užklausa INSERT. Rezultatai parodyti žemiau.
Santrauka
- Automatinio prieaugio atributas, nurodytas stulpelyje su skaitmeniniais duomenų tipais, generuoja skaičius nuosekliai, kai tik į duomenų bazę įtraukiama nauja eilutė.
- Automatinis prieaugis dažniausiai naudojamas pirminiams raktams generuoti.
- Apibrėžtas automatinio prieaugio duomenų tipas turėtų būti pakankamai didelis, kad tilptų daugybė įrašų. Apibrėžus TINYINT kaip automatinio prieaugio lauko duomenų tipą, įrašų, kuriuos galima pridėti prie lentelės, skaičius yra apribotas iki 255 tik todėl, kad TINYINT duomenų tipas nepriims jokių reikšmių, viršijančių šias vertes.
- Laikoma gera praktika nurodyti nepasirašytą automatinių prieaugio raktų apribojimą, kad būtų išvengta neigiamų skaičių.
- Kai eilutė ištrinama iš lentelės, jos automatiškai padidintas ID nenaudojamas iš naujo. „MySQL“ toliau generuoja naujus skaičius nuosekliai.
- Pagal numatytuosius nustatymus pradinė AUTO_INCREMENT vertė yra 1 ir ji padidės 1 kiekvienam naujam įrašui
- Jei norite, kad seka AUTO_INCREMENT prasidėtų kita reikšme, naudokite AUTO_INCREMENT = 10