Co je automatický přírůstek?
Automatický přírůstek je funkce, která pracuje s číselnými datovými typy. Automaticky generuje sekvenční číselné hodnoty pokaždé, když je záznam vložen do tabulky pro pole definované jako automatický přírůstek.
Kdy použít automatický přírůstek?
V lekci o normalizaci databáze jsme se podívali na to, jak lze data ukládat s minimální redundancí, ukládáním dat do mnoha malých tabulek, které spolu souvisí pomocí primárního a cizího klíče.
Primární klíč musí být jedinečný, protože jednoznačně identifikuje řádek v databázi. Jak ale můžeme zajistit, aby byl primární klíč vždy jedinečný? Jedním z možných řešení by bylo použít vzorec k vygenerování primárního klíče, který před přidáním dat zkontroluje existenci klíče v tabulce. To může fungovat dobře, ale jak vidíte, přístup je složitý a není spolehlivý. Abychom se vyhnuli takové složitosti a zajistili, že primární klíč je vždy jedinečný, můžeme ke generování primárních klíčů použít funkci automatického přírůstku MySQL. Automatický přírůstek se používá s datovým typem INT. Datový typ INT podporuje podepsané i nepodepsané hodnoty. Nepodepsané datové typy mohou obsahovat pouze kladná čísla. Jako osvědčený postup se doporučuje definovat nepodepsané omezení pro primární klíč automatického přírůstku.
Syntaxe automatického přírůstku
Pojďme se nyní podívat na skript použitý k vytvoření tabulky kategorií filmů.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Všimněte si „AUTO_INCREMENT“ v poli category_id. To způsobí, že se ID kategorie automaticky vygeneruje pokaždé, když se do tabulky vloží nový řádek. Není zadáván při vkládání dat do tabulky, MySQL je generuje.
Ve výchozím nastavení je počáteční hodnota pro AUTO_INCREMENT 1 a pro každý nový záznam se zvýší o 1
Podívejme se na aktuální obsah tabulky kategorií.
SELECT * FROM `categories`;
Provedení výše uvedeného skriptu v pracovní ploše MySQL proti myflixdb nám dává následující výsledky.
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 |
Nyní vložíme novou kategorii do tabulky kategorií.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Provedení výše uvedeného skriptu proti myflixdb v pracovní ploše MySQL nám dává následující výsledky uvedené níže.
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 |
Všimněte si, že jsme nedodali ID kategorie. MySQL to pro nás automaticky vygeneroval, protože ID kategorie je definováno jako automatický přírůstek.
Pokud chcete získat ID poslední vložky, které bylo vygenerováno MySQL, můžete k tomu použít funkci LAST_INSERT_ID. Skript zobrazený níže získá poslední ID, které bylo vygenerováno.
SELECT LAST_INSERT_ID();
Provedení výše uvedeného skriptu dává poslední číslo přírůstku Auto generované dotazem INSERT. Výsledky jsou uvedeny níže.
souhrn
- Atribut automatického přírůstku, pokud je zadán ve sloupci s číselnými datovými typy, generuje čísla postupně, kdykoli je do databáze přidán nový řádek.
- Automatický přírůstek se běžně používá ke generování primárních klíčů.
- Definovaný datový typ v automatickém přírůstku by měl být dostatečně velký, aby pojal mnoho záznamů. Definování TINYINT jako datového typu pro pole s automatickým přírůstkem omezuje počet záznamů, které lze přidat do tabulky, pouze na 255, protože jakékoli hodnoty nad rámec, které by datový typ TINYINT nepřijal.
- Je dobrým zvykem specifikovat nepodepsané omezení na primárních klíčích s automatickým zvyšováním, aby nedocházelo k záporným číslům.
- Když je řádek odstraněn z tabulky, jeho automaticky se zvyšující ID se znovu nepoužije. MySQL pokračuje v generování nových čísel postupně.
- Ve výchozím nastavení je počáteční hodnota pro AUTO_INCREMENT 1 a pro každý nový záznam se zvýší o 1
- Chcete-li, aby sekvence AUTO_INCREMENT začínala jinou hodnotou, použijte AUTO_INCREMENT = 10