Il tipo di dati ENUM in MySQL è a oggetto stringa . Ci consente di limitare il valore scelto da un elenco di valori consentiti nella specifica della colonna al momento della creazione della tabella. È l'abbreviazione di enumerazione , il che significa che ciascuna colonna può avere uno dei possibili valori specificati. Utilizza indici numerici (1, 2, 3…) per rappresentare valori stringa.
MySQL Il tipo di dati ENUM presenta i seguenti vantaggi:
- Archiviazione dati compatta in cui la colonna può avere un insieme limitato di valori possibili specificati. Qui, i valori stringa vengono utilizzati automaticamente come indice numerico.
- Consente query e output leggibili perché i numeri possono essere tradotti nuovamente nella stringa corrispondente.
- Può accettare molti tipi di dati come numeri interi, a virgola mobile, decimali e stringhe.
Sintassi
Di seguito è riportata la sintassi utilizzata per definire il tipo di dati ENUM nella colonna:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
Nella sintassi precedente abbiamo definito solo tre valori ENUM, ma è possibile aumentarlo a seconda delle nostre esigenze. Qui dobbiamo assicurarci che i valori di enumerazione siano sempre all'interno di stringa letterale tra virgolette .
MySQL ci consente di definire il tipo di dati ENUM con i seguenti attributi:
NON NULLO: Per impostazione predefinita, il tipo di dati ENUM è NULL. Se non vogliamo consentire valori NULL, è necessario utilizzare la proprietà NOT NULL specificando la colonna ENUM.
NULLO: È un sinonimo di DEFAULT NULL e il suo valore di indice è sempre NULL.
PREDEFINITO: Quando un valore non è specificato nella colonna, il tipo di dati ENUM inserisce il valore predefinito. In altre parole, se l'istruzione INSERT non fornisce un valore per questa colonna, verrà inserito il valore predefinito. L'espressione DEFAULT non consente di inserire funzioni. Il tipo di dati ENUM in My SQL include i valori DEFAULT come NULL o una stringa vuota ('').
Esempio di ENUM MySQL
Cerchiamo di capire come funziona il tipo di dati ENUM in MySQL con la seguente illustrazione. Qui creeremo una tabella denominata ' camicie ' che contiene tre colonne: id, name e size.
La colonna delle dimensioni utilizza il tipo di dati ENUM e ha dimensioni piccola, media, grande e x-grande. MySQL mappa questi membri dell'enumerazione su un indice numerico dove rispettivamente piccolo=1, medio=2, grande=3 e x-grande=4. Eseguire la seguente query per creare una tabella:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Successivamente, dobbiamo inserire i valori nella tabella. Durante l'inserimento, i valori dell'enumerazione possono essere inseriti come stringa letterale o come indici numerici ed entrambi sono uguali. Eseguire la seguente istruzione per inserire i valori nella tabella:
strati del modello osi
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Ora esegui l'istruzione SELECT per vedere i valori inseriti nella tabella:
mysql> SELECT * FROM shirts;
L'immagine seguente contiene tutti i risultati della query precedente che contengono i valori di enumerazione solo in valori letterali di stringa:
ENUM Ordinamento
MySQL ordina i valori di enumerazione in base ai loro indici numerici che dipendono dall'ordine in cui abbiamo inserito i dati nella specifica della colonna. Per esempio , se abbiamo definito l'enumerazione come ENUM ('b', 'a', '', 'c'). Quindi, b viene prima di a, la stringa vuota viene prima di c (stringa non vuota) e il valore NULL viene prima degli altri valori.
Pertanto, se non vogliamo ottenere risultati imprevisti con il tipo di dati ENUM utilizzando la clausola ORDER BY, seguire queste regole:
- Definire i valori di enumerazione in ordine alfabetico.
- Serve per assicurarsi che il nome della colonna sia in ordine lessicale anziché in numero di indice.
L'esempio seguente spiega più chiaramente l'ordinamento dell'enumerazione. Quindi, se desideri ottenere la taglia delle magliette in un ordine specifico, esegui la dichiarazione seguente:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Questa query fornirà l'output come di seguito dove possiamo vedere che la taglia delle magliette è in ordine decrescente:
Limitazioni del tipo di dati ENUM
Di seguito sono riportati gli svantaggi del tipo di dati ENUM in MySQL:
1. Se vogliamo modificare i valori/membri dell'enumerazione, è possibile farlo ricostruendo l'intera tabella utilizzando il comando ALTER TABLE. Inoltre, fa un uso costoso delle nostre risorse e del nostro tempo.
2. Non possiamo usare un'espressione con membri di enumerazione. Ad esempio, questa istruzione CREATE non viene eseguita perché utilizza la funzione CONCAT() per creare membri dell'enumerazione.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Non possiamo utilizzare la variabile utente come membro di enumerazione. Può essere visto nell'esempio seguente:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Si consiglia di non utilizzare valori numerici come membri dell'enumerazione.
5. È complesso ottenere un elenco completo di enumerazione delle informazioni perché è necessario accedere al database information_schema.
6. Potremmo riscontrare un problema durante il porting di ENUM su altri RDBMS perché molti database non supportano questo tipo di dati.
7. Non possiamo aggiungere più attributi agli elenchi di enumerazione.