Datový typ ENUM v MySQL je a řetězec objektu . Umožňuje nám omezit hodnotu vybranou ze seznamu povolených hodnot ve specifikaci sloupce v době vytváření tabulky. Je to zkratka pro výčet , což znamená, že každý sloupec může mít jednu ze zadaných možných hodnot. Používá číselné indexy (1, 2, 3…), které představují hodnoty řetězce.
MySQL Datový typ ENUM obsahuje následující výhody:
- Kompaktní úložiště dat, kde sloupec může mít omezenou sadu zadaných možných hodnot. Zde jsou hodnoty řetězce automaticky použity jako číselný index.
- Umožňuje čitelné dotazy a výstup, protože čísla lze znovu přeložit na odpovídající řetězec.
- Může přijímat mnoho datových typů, jako je celé číslo, s plovoucí desetinnou čárkou, desetinné číslo a řetězec.
Syntax
Následující syntaxe se používá k definování datového typu ENUM ve sloupci:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
Ve výše uvedené syntaxi jsme definovali pouze tři hodnoty ENUM, ale lze je zvýšit podle našich potřeb. Zde se musíme ujistit, že hodnoty výčtu by měly vždy zůstat uvnitř citovaný řetězcový literál .
MySQL nám umožňuje definovat datový typ ENUM s následujícími atributy:
NENULOVÝ: Ve výchozím nastavení je typ dat ENUM NULL. Pokud nechceme povolit hodnoty NULL, je nutné při specifikaci sloupce ENUM použít vlastnost NOT NULL.
NULA: Je synonymem pro DEFAULT NULL a jeho indexová hodnota je vždy NULL.
podtrhnout v markdown
VÝCHOZÍ: Pokud není ve sloupci zadána hodnota, vloží datový typ ENUM výchozí hodnotu. Jinými slovy, pokud příkaz INSERT neposkytuje hodnotu pro tento sloupec, bude vložena výchozí hodnota. Výraz DEFAULT neumožňuje vložení funkce. Datový typ ENUM v My SQL obsahuje DEFAULT hodnoty jako NULL nebo prázdný řetězec ('').
Příklad MySQL ENUM
Pojďme pochopit, jak funguje datový typ ENUM v MySQL pomocí následujícího obrázku. Zde vytvoříme tabulku s názvem ' košile ', který obsahuje tři sloupce: id, name a size.
Sloupec velikost používá datový typ ENUM a má malé, střední, velké a x-velké velikosti. MySQL mapuje tyto členy výčtu na číselný index, kde malý=1, střední=2, velký=3 a x-velký=4. Pro vytvoření tabulky spusťte následující dotaz:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Dále musíme vložit hodnoty do tabulky. Během vkládání lze hodnoty výčtu vkládat buď jako řetězcový literál nebo jeho číselné indexy, přičemž oba jsou stejné. Provedením následujícího příkazu vložte hodnoty do tabulky:
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Nyní spusťte příkaz SELECT, abyste viděli vložené hodnoty do tabulky:
mysql> SELECT * FROM shirts;
Následující obrázek obsahuje všechny výše uvedené výsledky dotazu, které obsahují hodnoty výčtu pouze v řetězcových literálech:
ENUM řazení
MySQL třídí výčtové hodnoty na základě jejich číselných indexů, které závisí na pořadí, ve kterém jsme vložili data do specifikace sloupce. Například , pokud jsme definovali výčet jako ENUM ('b', 'a', '', 'c'). Potom je b před a, prázdný řetězec je před c (neprázdný řetězec) a hodnota NULL je před ostatními hodnotami.
Pokud tedy nechceme získat neočekávaný výsledek s datovým typem ENUM pomocí klauzule ORDER BY , dodržujte tato pravidla:
java index
- Definujte hodnoty výčtu v abecedním pořadí.
- Je třeba zajistit, aby název sloupce byl v lexikálním pořadí, nikoli indexové číslo.
Následující příklad vysvětluje řazení výčtu jasněji. Pokud tedy chcete získat velikost košil v určitém pořadí, proveďte následující příkaz:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Tento dotaz poskytne výstup jako níže, kde můžeme vidět, že velikost košil je v sestupném pořadí:
Omezení datového typu ENUM
Níže jsou uvedeny nevýhody datového typu ENUM v MySQL:
1. Pokud chceme upravit hodnoty/členy výčtu, lze to provést přebudováním celé tabulky pomocí příkazu ALTER TABLE. Je to také nákladné využití našich zdrojů a času.
2. Nemůžeme použít výraz s výčtovými členy. Například tento příkaz CREATE se neprovede, protože používá funkci CONCAT() pro vytváření členů výčtu.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Nemůžeme použít uživatelskou proměnnou jako člen výčtu. Je to vidět na níže uvedeném příkladu:
f filmy
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Doporučuje se, abychom jako členy výčtu nepoužívali číselné hodnoty.
5. Je složité získat úplný seznam výčtů informací, protože potřebujeme přístup k databázi information_schema.
6. Při portování ENUM na jiné RDBMS můžeme čelit problému, protože mnoho databází tento typ dat nepodporuje.
7. Do výčtových seznamů nemůžeme přidat další atributy.