ENUM-datatypen i MySQL er en strengobjekt . Det giver os mulighed for at begrænse den valgte værdi fra en liste over tilladte værdier i kolonnespecifikationen på tidspunktet for tabeloprettelse. Det er en forkortelse for opremsning , hvilket betyder, at hver kolonne kan have en af de angivne mulige værdier. Det bruger numeriske indekser (1, 2, 3...) for at repræsentere strengværdier.
MySQL ENUM-datatypen indeholder følgende fordele:
- Kompakt datalagring, hvor kolonnen kan have et begrænset sæt af specificerede mulige værdier. Her bruges strengværdierne automatisk som et numerisk indeks.
- Det tillader læsbare forespørgsler og output, fordi tallene kan oversættes igen til den tilsvarende streng.
- Det kan acceptere mange datatyper som heltal, flydende komma, decimal og streng.
Syntaks
Følgende er den syntaks, der bruges til at definere ENUM-datatypen i kolonnen:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
I ovenstående syntaks har vi kun defineret tre ENUM-værdier, men det kan øges efter vores behov. Her skal vi sørge for, at opregningsværdierne altid skal holde sig inden for citeret streng bogstavelig .
MySQL giver os mulighed for at definere ENUM-datatypen med følgende attributter:
IKKE NULL: Som standard er ENUM-datatypen NULL. Hvis vi ikke ønsker at tillade NULL-værdierne, er det nødvendigt at bruge egenskaben NOT NULL, mens ENUM-kolonnen angives.
NUL: Det er et synonym for DEFAULT NULL, og dets indeksværdi er altid NULL.
STANDARD: Når en værdi ikke er angivet i kolonnen, indsætter datatypen ENUM standardværdien. Med andre ord, hvis INSERT-sætningen ikke giver en værdi for denne kolonne, vil standardværdien blive indsat. DEFAULT-udtrykket tillader ikke at indsætte funktion. ENUM-datatypen i My SQL inkluderer DEFAULT-værdierne som NULL eller en tom streng ('').
MySQL ENUM eksempel
Lad os forstå, hvordan ENUM-datatypen fungerer i MySQL med følgende illustration. Her skal vi lave en tabel med navnet ' skjorter ', der indeholder tre kolonner: id, navn og størrelse.
Størrelseskolonnen bruger ENUM-datatypen og har små, mellemstore, store og x-store størrelser. MySQL kortlægger disse opregningsmedlemmer til et numerisk indeks, hvor henholdsvis small=1, medium=2, large=3 og x-large=4. Udfør følgende forespørgsel for at oprette en tabel:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Dernæst skal vi indsætte værdierne i tabellen. Under indsættelse kan optællingsværdierne indsættes enten som strengen literal eller dens numeriske indekser, og begge er de samme. Udfør følgende sætning for at indsætte værdierne i tabellen:
tynd algoritme
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Udfør nu SELECT-sætningen for at se de indsatte værdier i tabellen:
mysql> SELECT * FROM shirts;
Følgende billede indeholder alle ovenstående forespørgselsresultater, der kun indeholder opregningsværdierne i strengliteraler:
ENUM sortering
MySQL sorterer opregningsværdierne baseret på deres numeriske indeks, der afhænger af den rækkefølge, vi har indsat dataene i kolonnespecifikationen. For eksempel , hvis vi har defineret opregningen som ENUM ('b', 'a', '', 'c'). Så kommer b før a, den tomme streng kommer før c (ikke-tom streng), og NULL-værdi kommer før andre værdier.
Så hvis vi ikke ønsker at få et uventet resultat med ENUM-datatypen ved hjælp af ORDER BY-klausul, følg disse regler:
- Definer opregningsværdierne i alfabetisk rækkefølge.
- Det er for at sikre, at kolonnenavnet er i leksikalsk rækkefølge frem for indeksnummer.
Følgende eksempel forklarer opregningssortering mere tydeligt. Så hvis du ønsker at få størrelsen på skjorterne i en bestemt rækkefølge, udfør erklæringen nedenfor:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Denne forespørgsel vil give output som nedenfor, hvor vi kan se, at størrelsen på skjorter er i faldende rækkefølge:
Begrænsninger af ENUM Data Type
Følgende er ulemperne ved ENUM-datatypen i MySQL:
1. Hvis vi ønsker at ændre opregningsværdierne/medlemmerne, kan det gøres ved at genopbygge hele tabellen med kommandoen ALTER TABLE. Det gør også dyrt brug af vores ressourcer og tid.
2. Vi kan ikke bruge et udtryk med opregningsmedlemmer. For eksempel udføres denne CREATE-sætning ikke, fordi den bruger CONCAT()-funktionen til at oprette optællingsmedlemmer.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Vi kan ikke bruge brugervariablen som et opregningsmedlem. Det kan ses i nedenstående eksempel:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Det anbefales, at vi ikke bruger de numeriske værdier som opregningsmedlemmer.
5. Det er komplekst at få en komplet informationsliste, fordi vi skal have adgang til informationsskemadatabasen.
6. Vi kan støde på et problem under porteringen af ENUM til andre RDBMS, fordi mange databaser ikke understøtter denne datatype.
7. Vi kan ikke tilføje flere attributter til opregningslisterne.