Mi az automatikus növekedés?
Az Auto Increment egy olyan funkció, amely numerikus adattípusokon működik. Automatikusan szekvenciális numerikus értékeket generál minden alkalommal, amikor egy rekordot beillesztenek egy táblába egy automatikus növekedésként definiált mezőhöz.
Mikor használja az automatikus növekedést?
Az adatbázis-normalizálásról szóló leckében megvizsgáltuk, hogyan lehet az adatokat minimális redundanciával tárolni úgy, hogy sok kis táblába tároljuk az adatokat, amelyek elsődleges és idegen kulcsok segítségével kapcsolódnak egymáshoz.
Az elsődleges kulcsnak egyedinek kell lennie, mivel egyedileg azonosítja az adatbázis egy sorát. De hogyan biztosíthatjuk, hogy az elsődleges kulcs mindig egyedi legyen? Az egyik lehetséges megoldás az lenne, hogy képlet segítségével hozza létre az elsődleges kulcsot, amely az adatok hozzáadása előtt a táblázatban ellenőrzi a kulcs meglétét. Ez jól működhet, de mint látható, a megközelítés összetett és nem bolondbiztos. Az ilyen összetettség elkerülése és annak biztosítása érdekében, hogy az elsődleges kulcs mindig egyedi legyen, használhatjuk a MySQL Auto inkrement funkcióját az elsődleges kulcsok előállításához. Az automatikus növekményt az INT adattípusnál használják. Az INT adattípus egyaránt támogatja az aláírt és az aláíratlan értékeket. Az aláíratlan adattípusok csak pozitív számokat tartalmazhatnak. Bevált gyakorlatként ajánlott meghatározni az aláíratlan korlátozást az automatikus növekedés elsődleges kulcsán.
Automatikus növekedés szintaxisa
Most nézzük meg a filmkategóriák táblázat létrehozásához használt szkriptet.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Figyelje meg az "AUTO_INCREMENT" elemet a category_id mezőben. Ez azt eredményezi, hogy az Id kategória automatikusan generálódik, valahányszor új sor kerül a táblázatba. Adatok táblába történő beszúrásakor nem kerül kiszállításra, a MySQL generálja azokat.
Alapértelmezés szerint az AUTO_INCREMENT kezdőértéke 1, és minden új rekordnál 1-gyel növekszik
Vizsgáljuk meg a kategóriák táblázat aktuális tartalmát.
SELECT * FROM `categories`;
A fenti parancsfájl futtatása a MySQL munkapadban a myflixdb fájlhoz a következő eredményeket adja.
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 |
Helyezzünk be most egy új kategóriát a kategóriák táblázatba.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
A fenti parancsfájl futtatása a myflixdb-vel a MySQL munkapadban a következő eredményeket nyújtja nekünk.
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 |
Ne feledje, hogy nem adtuk meg a kategóriaazonosítót. A MySQL automatikusan létrehozta nekünk, mert a kategóriaazonosítót automatikus növekményként definiálják.
Ha meg szeretné szerezni a MySQL által létrehozott utolsó beillesztési azonosítót, használhatja a LAST_INSERT_ID függvényt erre. Az alább látható szkript megkapja az utolsó generált azonosítót.
SELECT LAST_INSERT_ID();
A fenti parancsfájl végrehajtása megadja az INSERT lekérdezés által generált utolsó automatikus növekményszámot. Az eredményeket az alábbiakban mutatjuk be.
Összegzés
- Az automatikus növekmény attribútum, ha egy oszlopban numerikus adattípusokkal van megadva, akkor sorokat generál, amikor új sor kerül az adatbázisba.
- Az elsődleges kulcsok előállításához általában az automatikus növekményt használják.
- Az automatikus növekedés meghatározott adattípusának elég nagynak kell lennie ahhoz, hogy sok rekordot befogadjon. A TINYINT meghatározása az automatikus növekménymező adattípusaként csak a 255-re korlátozhatja a táblázathoz hozzáadható rekordok számát, mivel a TINYINT adattípus nem fogad el semmilyen értéket.
- Jó gyakorlatnak tekintjük az automatikus növekményű elsődleges kulcsok aláíratlan korlátozásának megadását a negatív számok elkerülése érdekében.
- Ha egy sort törölnek egy táblából, akkor annak automatikusan növelt azonosítóját nem használják fel újra. A MySQL folytatja az új számok generálását egymás után.
- Alapértelmezés szerint az AUTO_INCREMENT kezdőértéke 1, és minden új rekordnál 1-gyel növekszik
- Ha az AUTO_INCREMENT szekvenciát egy másik értékkel szeretné kezdeni, használja az AUTO_INCREMENT = 10 parancsot