ENUM-datatypen i MySQL er en strengobjekt . Den lar oss begrense verdien som er valgt fra en liste over tillatte verdier i kolonnespesifikasjonen på tidspunktet for tabelloppretting. Det er en forkortelse for oppregning , som betyr at hver kolonne kan ha en av de angitte mulige verdiene. Det bruker numeriske indekser (1, 2, 3...) for å representere strengverdier.
MySQL ENUM-datatypen inneholder følgende fordeler:
- Kompakt datalagring der kolonnen kan ha et begrenset sett med spesifiserte mulige verdier. Her brukes strengverdiene automatisk som en numerisk indeks.
- Den tillater lesbare spørringer og utdata fordi tallene kan oversettes igjen til den tilsvarende strengen.
- Den kan godta mange datatyper som heltall, flytende komma, desimal og streng.
Syntaks
Følgende er syntaksen som brukes til å definere ENUM-datatypen i kolonnen:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
I syntaksen ovenfor har vi kun definert tre ENUM-verdier, men den kan økes i henhold til våre behov. Her må vi sørge for at oppregningsverdiene alltid skal holde seg innenfor sitert streng bokstavelig .
MySQL lar oss definere ENUM-datatypen med følgende attributter:
IKKE NULL: Som standard er ENUM-datatypen NULL. Hvis vi ikke vil tillate NULL-verdiene, er det nødvendig å bruke NOT NULL-egenskapen mens du spesifiserer ENUM-kolonnen.
NULL: Det er et synonym for DEFAULT NULL, og indeksverdien er alltid NULL.
MISLIGHOLDE: Når en verdi ikke er spesifisert i kolonnen, setter ENUM-datatypen inn standardverdien. Med andre ord, hvis INSERT-setningen ikke gir en verdi for denne kolonnen, vil standardverdien bli satt inn. DEFAULT-uttrykket tillater ikke å sette inn funksjon. ENUM-datatypen i My SQL inkluderer DEFAULT-verdiene som NULL eller en tom streng ('').
MySQL ENUM Eksempel
La oss forstå hvordan ENUM-datatypen fungerer i MySQL med følgende illustrasjon. Her skal vi lage en tabell som heter ' skjorter ' som inneholder tre kolonner: id, navn og størrelse.
Størrelseskolonnen bruker ENUM-datatypen og har små, medium, store og x-large størrelser. MySQL tilordner disse oppregningsmedlemmene til en numerisk indeks der henholdsvis liten=1, medium=2, stor=3 og x-stor=4. Utfør følgende spørring for å lage en tabell:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Deretter må vi sett inn verdiene inn i tabellen. Under innsetting kan oppregningsverdiene settes inn enten som strengen literal eller dens numeriske indekser, og begge er de samme. Utfør følgende setning for å sette inn verdiene i tabellen:
hva er linux-filsystemet
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Kjør nå SELECT-setningen for å se de innsatte verdiene i tabellen:
mysql> SELECT * FROM shirts;
Følgende bilde inneholder alle søkeresultatene ovenfor som bare inneholder oppregningsverdier i strengliteral:
ENUM Sortering
MySQL sorterer opptellingsverdiene basert på deres numeriske indekser som avhenger av rekkefølgen vi har satt inn dataene i kolonnespesifikasjonen. For eksempel , hvis vi har definert opptellingen som ENUM ('b', 'a', '', 'c'). Deretter kommer b før a, den tomme strengen kommer før c (ikke-tom streng), og NULL-verdien kommer før andre verdier.
Så hvis vi ikke ønsker å få et uventet resultat med ENUM-datatypen ved å bruke ORDER BY-klausul , følg disse reglene:
- Definer opptellingsverdiene i alfabetisk rekkefølge.
- Det er å sørge for at kolonnenavnet er i leksikalsk rekkefølge i stedet for indeksnummer.
Følgende eksempel forklarer oppregningssortering tydeligere. Så hvis du ønsker å få størrelsen på skjortene i en bestemt rekkefølge, utfør setningen nedenfor:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Denne spørringen vil gi utdata som nedenfor der vi kan se at størrelsen på skjorter er i synkende rekkefølge:
Begrensninger for ENUM Data Type
Følgende er ulempene med ENUM-datatypen i MySQL:
1. Hvis vi ønsker å endre oppregningsverdiene/medlemmene, kan det gjøres ved å bygge om hele tabellen ved å bruke ALTER TABLE-kommandoen. Det gjør også dyr bruk av ressursene og tiden våre.
2. Vi kan ikke bruke et uttrykk med oppregningsmedlemmer. For eksempel, denne CREATE-setningen kjøres ikke fordi den bruker CONCAT()-funksjonen for å lage oppregningsmedlemmer.
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 bruke brukervariabelen som et oppregningsmedlem. Det kan sees i eksemplet nedenfor:
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 bruker de numeriske verdiene som oppregningsmedlemmer.
5. Det er komplisert å få en fullstendig informasjonsoppregningsliste fordi vi trenger tilgang til informasjonsskjemadatabasen.
6. Vi kan møte et problem under porteringen av ENUM til andre RDBMS fordi mange databaser ikke støtter denne datatypen.
7. Vi kan ikke legge til flere attributter til oppregningslistene.