Dátový typ ENUM v MySQL je a reťazcový objekt . Umožňuje nám obmedziť hodnotu zvolenú zo zoznamu povolených hodnôt v špecifikácii stĺpca v čase vytvárania tabuľky. Je to skratka pre enumerácia , čo znamená, že každý stĺpec môže mať jednu zo špecifikovaných možných hodnôt. Používa sa číselné indexy (1, 2, 3…), ktoré predstavujú hodnoty reťazca.
MySQL Dátový typ ENUM obsahuje nasledujúce výhody:
- Kompaktné úložisko údajov, kde stĺpec môže mať obmedzenú množinu špecifikovaných možných hodnôt. Tu sa hodnoty reťazca automaticky používajú ako číselný index.
- Umožňuje čitateľné dotazy a výstupy, pretože čísla možno znova preložiť na zodpovedajúci reťazec.
- Môže akceptovať mnoho typov údajov, ako je celé číslo, s pohyblivou rádovou čiarkou, desatinné číslo a reťazec.
Syntax
Nasledujú syntaxe používané na definovanie typu údajov ENUM v stĺpci:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
Vo vyššie uvedenej syntaxi sme definovali iba tri hodnoty ENUM, ale je možné ich zvýšiť podľa našich potrieb. Tu sa musíme uistiť, že hodnoty enumerácie by mali vždy zostať vo vnútri citovaný reťazcový doslov .
MySQL nám umožňuje definovať typ údajov ENUM s nasledujúcimi atribútmi:
char to int
NOT NULL: Predvolene je typ údajov ENUM NULL. Ak nechceme povoliť hodnoty NULL, je potrebné pri špecifikovaní stĺpca ENUM použiť vlastnosť NOT NULL.
NULOVÝ: Je to synonymum pre DEFAULT NULL a jeho indexová hodnota je vždy NULL.
VÝCHOZÍ: Ak v stĺpci nie je zadaná hodnota, typ údajov ENUM vloží predvolenú hodnotu. Inými slovami, ak príkaz INSERT neposkytuje hodnotu pre tento stĺpec, vloží sa predvolená hodnota. Výraz DEFAULT neumožňuje vložiť funkciu. Dátový typ ENUM v My SQL obsahuje DEFAULT hodnoty ako NULL alebo prázdny reťazec ('').
Príklad MySQL ENUM
Poďme pochopiť, ako funguje dátový typ ENUM v MySQL pomocou nasledujúcej ilustrácie. Tu vytvoríme tabuľku s názvom ' košele ktorý obsahuje tri stĺpce: id, name a size.
klauzuly sql
Stĺpec veľkosti používa typ údajov ENUM a má malé, stredné, veľké a veľké veľkosti. MySQL mapuje tieto enumeračné členy na číselný index, kde malý=1, stredný=2, veľký=3 a x-veľký=4. Vykonajte nasledujúci dotaz na vytvorenie tabuľky:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Ďalej musíme vložiť hodnoty do tabuľky. Počas vkladania môžu byť hodnoty enumerácie vložené buď ako reťazcový literál alebo jeho číselné indexy, pričom obe sú rovnaké. Na vloženie hodnôt do tabuľky vykonajte nasledujúci príkaz:
susedné uhly
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Teraz vykonajte príkaz SELECT, aby ste videli vložené hodnoty do tabuľky:
mysql> SELECT * FROM shirts;
Nasledujúci obrázok obsahuje všetky vyššie uvedené výsledky dotazu, ktoré obsahujú hodnoty enumerácie iba v reťazcových literáloch:
ENUM Triedenie
MySQL triedi hodnoty enumerácie na základe ich číselných indexov, ktoré závisia od poradia, v ktorom sme vložili údaje do špecifikácie stĺpca. Napríklad , ak sme definovali enumeráciu ako ENUM ('b', 'a', '', 'c'). Potom je b pred a, prázdny reťazec je pred c (neprázdny reťazec) a hodnota NULL je pred ostatnými hodnotami.
Ak teda nechceme získať neočakávaný výsledok s typom údajov ENUM pomocou klauzuly ORDER BY , postupujte podľa týchto pravidiel:
- Definujte hodnoty enumerácie v abecednom poradí.
- Je potrebné zabezpečiť, aby názov stĺpca bol v lexikálnom poradí a nie číslo indexu.
Nasledujúci príklad vysvetľuje triedenie enumerácie jasnejšie. Ak teda chcete získať veľkosť tričiek v konkrétnom poradí, vykonajte nasledujúce vyhlásenie:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Tento dotaz poskytne výstup, ako je uvedené nižšie, kde môžeme vidieť, že veľkosť tričiek je v zostupnom poradí:
Obmedzenia typu údajov ENUM
Nasledujú nevýhody dátového typu ENUM v MySQL:
1. Ak chceme upraviť hodnoty/členy enumerácie, môžeme to urobiť prebudovaním celej tabuľky pomocou príkazu ALTER TABLE. Je to nákladné využitie našich zdrojov a času.
typ casting a konverzia typu v jave
2. Nemôžeme použiť výraz s členmi enumerácie. Napríklad tento príkaz CREATE sa nevykoná, pretože používa funkciu CONCAT() na vytvorenie členov enumerácie.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Používateľskú premennú nemôžeme použiť ako člen enumerácie. Je to vidieť na nasledujúcom príklade:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Odporúča sa, aby sme ako členy enumerácie nepoužívali číselné hodnoty.
hlavná metóda java
5. Je zložité získať úplný zoznam informácií, pretože potrebujeme prístup k databáze information_schema.
6. Pri prenose ENUM do iných RDBMS môžeme čeliť problémom, pretože mnohé databázy nepodporujú tento typ údajov.
7. Do zoznamov nemôžeme pridať ďalšie atribúty.