Het ENUM-gegevenstype in MySQL is a string-object . Hiermee kunnen we de waarde beperken die is gekozen uit een lijst met toegestane waarden in de kolomspecificatie op het moment dat de tabel wordt gemaakt. Het is een afkorting voor opsomming , wat betekent dat elke kolom een van de opgegeven mogelijke waarden kan hebben. Het gebruikt numerieke indexen (1, 2, 3…) om tekenreekswaarden weer te geven.
MySQL ENUM-gegevenstype biedt de volgende voordelen:
- Compacte gegevensopslag waarbij de kolom een beperkte set gespecificeerde mogelijke waarden kan hebben. Hier worden de stringwaarden automatisch gebruikt als numerieke index.
- Het maakt leesbare zoekopdrachten en uitvoer mogelijk omdat de getallen opnieuw kunnen worden vertaald naar de overeenkomstige tekenreeks.
- Het kan veel gegevenstypen accepteren, zoals geheel getal, drijvende komma, decimaal en tekenreeks.
Syntaxis
Hieronder volgen de syntaxis die wordt gebruikt om het ENUM-gegevenstype in de kolom te definiëren:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
In de bovenstaande syntaxis hebben we slechts drie ENUM-waarden gedefinieerd, maar deze kunnen naar behoefte worden verhoogd. Hier moeten we ervoor zorgen dat de opsommingswaarden altijd binnen de letterlijke tekenreeks tussen aanhalingstekens .
Met MySQL kunnen we het ENUM-gegevenstype definiëren met de volgende attributen:
NIET NUL: Standaard is het ENUM-gegevenstype NULL. Als we de NULL-waarden niet willen toestaan, is het vereist om de eigenschap NOT NULL te gebruiken bij het opgeven van de ENUM-kolom.
int om in Java te stringen
NUL: Het is een synoniem voor DEFAULT NULL en de indexwaarde ervan is altijd NULL.
STANDAARD: Wanneer er geen waarde is opgegeven in de kolom, wordt met het gegevenstype ENUM de standaardwaarde ingevoegd. Met andere woorden: als de INSERT-instructie geen waarde voor deze kolom opgeeft, wordt de standaardwaarde ingevoegd. De DEFAULT-expressie staat het invoegen van een functie niet toe. Het ENUM-gegevenstype in Mijn SQL bevat de DEFAULT-waarden als NULL of een lege tekenreeks ('').
MySQL ENUM-voorbeeld
Laten we begrijpen hoe het ENUM-gegevenstype werkt in MySQL met de volgende illustratie. Hier gaan we een tabel maken met de naam ' overhemden ' dat drie kolommen bevat: id, naam en grootte.
De kolom Size gebruikt het gegevenstype ENUM en heeft de formaten small, medium, large en x-large. MySQL wijst dit opsommingslid toe aan een numerieke index waarbij respectievelijk small=1, medium=2, large=3 en x-large=4. Voer de volgende query uit om een tabel te maken:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Vervolgens moeten we invoegen de waarden in de tabel. Tijdens het invoegen kunnen de opsommingswaarden worden ingevoegd als de letterlijke tekenreeks of als numerieke indexen, en beide zijn hetzelfde. Voer de volgende instructie uit om de waarden in de tabel in te voegen:
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Voer nu de SELECT-instructie uit om de ingevoegde waarden in de tabel te bekijken:
voorbeeld van een lijst in Java
mysql> SELECT * FROM shirts;
De volgende afbeelding bevat alle bovenstaande queryresultaten die de opsommingswaarden alleen in letterlijke tekenreeksen bevatten:
ENUM-sortering
MySQL sorteert de opsommingswaarden op basis van hun numerieke indexen die afhankelijk zijn van de volgorde waarin we de gegevens in de kolomspecificatie hebben ingevoegd. Bijvoorbeeld , als we de opsomming hebben gedefinieerd als ENUM ('b', 'a', '', 'c'). Vervolgens komt b vóór a, de lege tekenreeks vóór c (niet-lege tekenreeks) en de NULL-waarde vóór andere waarden.
Dus als we geen onverwacht resultaat willen krijgen met het ENUM-gegevenstype met behulp van de ORDER BY-clausule, volgt u deze regels:
- Definieer de opsommingswaarden in alfabetische volgorde.
- Het is bedoeld om ervoor te zorgen dat de kolomnaam in lexicale volgorde staat en niet in indexnummer.
In het volgende voorbeeld wordt het sorteren van opsommingen duidelijker uitgelegd. Dus als je de maat van de shirts in een specifieke volgorde wilt hebben, voer dan de onderstaande verklaring uit:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Deze zoekopdracht geeft de onderstaande uitvoer, waarin we kunnen zien dat de maat van shirts in aflopende volgorde is:
Beperkingen van ENUM-gegevenstype
Hier volgen de nadelen van het ENUM-gegevenstype in MySQL:
1. Als we de opsommingswaarden/leden willen wijzigen, kan dit worden gedaan door de hele tabel opnieuw op te bouwen met behulp van de opdracht ALTER TABLE. Het maakt ook duur gebruik van onze middelen en tijd.
2. We kunnen geen expressie gebruiken met opsommingsleden. Deze instructie CREATE wordt bijvoorbeeld niet uitgevoerd omdat deze de functie CONCAT() gebruikt voor het maken van opsommingsleden.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. We kunnen de gebruikersvariabele niet als opsommingslid gebruiken. Het is te zien in het onderstaande voorbeeld:
als anders als anders als java
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Het wordt aanbevolen om de numerieke waarden niet als opsommingsleden te gebruiken.
5. Het is ingewikkeld om een volledige informatie-opsommingslijst te krijgen, omdat we toegang moeten hebben tot de database information_schema.
6. Er kan een probleem optreden tijdens het porten van ENUM naar andere RDBMS, omdat veel databases dit gegevenstype niet ondersteunen.
7. We kunnen niet meer attributen toevoegen aan de opsommingslijsten.