ENUM-datatypen i MySQL är en strängobjekt . Det tillåter oss att begränsa värdet som valts från en lista över tillåtna värden i kolumnspecifikationen vid tidpunkten för tabellskapandet. Det är förkortning för uppräkning , vilket innebär att varje kolumn kan ha ett av de angivna möjliga värdena. Det använder numeriska index (1, 2, 3...) för att representera strängvärden.
MySQL ENUM-datatypen innehåller följande fördelar:
java standardparametrar
- Kompakt datalagring där kolumnen kan ha en begränsad uppsättning angivna möjliga värden. Här används strängvärdena automatiskt som ett numeriskt index.
- Det tillåter läsbara frågor och utdata eftersom siffrorna kan översättas igen till motsvarande sträng.
- Den kan acceptera många datatyper som heltal, flyttal, decimal och sträng.
Syntax
Följande är syntaxen som används för att definiera ENUM-datatypen i kolumnen:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
I ovanstående syntax har vi bara definierat tre ENUM-värden, men det kan ökas efter våra behov. Här måste vi se till att uppräkningsvärdena alltid ska hållas inom citerad sträng bokstavlig .
MySQL tillåter oss att definiera ENUM-datatypen med följande attribut:
INTE NULL: Som standard är ENUM-datatypen NULL. Om vi inte vill tillåta NULL-värdena, är det nödvändigt att använda egenskapen NOT NULL medan ENUM-kolumnen specificeras.
NULL: Det är en synonym för DEFAULT NULL, och dess indexvärde är alltid NULL.
STANDARD: När ett värde inte anges i kolumnen infogar datatypen ENUM standardvärdet. Med andra ord, om INSERT-satsen inte ger ett värde för denna kolumn, kommer standardvärdet att infogas. DEFAULT-uttrycket tillåter inte att infoga funktion. ENUM-datatypen i My SQL inkluderar DEFAULT-värdena som NULL eller en tom sträng ('').
MySQL ENUM Exempel
Låt oss förstå hur ENUM-datatyp fungerar i MySQL med följande illustration. Här ska vi skapa en tabell som heter ' skjortor ' som innehåller tre kolumner: id, namn och storlek.
Storlekskolumnen använder datatypen ENUM och har små, medelstora, stora och x-stora storlekar. MySQL mappar dessa uppräkningsmedlemmar till ett numeriskt index där small=1, medium=2, large=3 respektive x-large=4. Utför följande fråga för att skapa en tabell:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Därefter måste vi Föra in värdena i tabellen. Under infogning kan uppräkningsvärdena infogas antingen som strängen literal eller dess numeriska index, och båda är desamma. Utför följande sats för att infoga värdena i tabellen:
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Kör nu SELECT-satsen för att se de infogade värdena i tabellen:
mysql> SELECT * FROM shirts;
Följande bild innehåller alla ovanstående frågeresultat som endast innehåller uppräkningsvärdena i bokstavssträngar:
ENUM Sortering
MySQL sorterar uppräkningsvärdena baserat på deras numeriska index som beror på i vilken ordning vi har infogat data i kolumnspecifikationen. Till exempel , om vi har definierat uppräkningen som ENUM ('b', 'a', '', 'c'). Sedan kommer b före a, den tomma strängen kommer före c (icke-tom sträng), och NULL-värdet kommer före andra värden.
Så, om vi inte vill få oväntade resultat med ENUM-datatypen med hjälp av ORDER BY-satsen, följ dessa regler:
- Definiera uppräkningsvärdena i alfabetisk ordning.
- Det är för att se till att kolumnnamnet är i lexikal ordning snarare än indexnummer.
Följande exempel förklarar uppräkningssortering tydligare. Så om du vill få storleken på tröjorna i en specifik ordning, utför uttalandet nedan:
sql beställ efter datum
mysql> SELECT * FROM shirts ORDER BY size DESC;
Denna fråga kommer att ge utdata enligt nedan där vi kan se att storleken på skjortor är i fallande ordning:
Begränsningar för ENUM Data Type
Följande är nackdelarna med ENUM-datatypen i MySQL:
1. Om vi vill ändra uppräkningsvärdena/medlemmarna kan det göras genom att bygga om hela tabellen med kommandot ALTER TABLE. Det gör också en dyr användning av våra resurser och tid.
2. Vi kan inte använda ett uttryck med uppräkningsmedlemmar. Till exempel, Denna CREATE-sats körs inte eftersom den använder CONCAT()-funktionen för att skapa uppräkningsmedlemmar.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Vi kan inte använda användarvariabeln som en uppräkningsmedlem. Det kan ses i exemplet nedan:
försök fånga i java
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Det rekommenderas att vi inte använder de numeriska värdena som uppräkningsmedlemmar.
5. Det är komplicerat att få en komplett informationsuppräkningslista eftersom vi behöver komma åt informationsschemadatabasen.
6. Vi kan möta ett problem under porteringen av ENUM till andra RDBMS eftersom många databaser inte stöder denna datatyp.
7. Vi kan inte lägga till fler attribut till uppräkningslistorna.