MySQL ENUM

MySQL ENUM

MySQL:n ENUM-tietotyyppi on a merkkijonoobjekti . Sen avulla voimme rajoittaa arvoa, joka on valittu sarakemäärittelyn sallittujen arvojen luettelosta taulukon luomisen yhteydessä. Se on lyhenne luettelointi , mikä tarkoittaa, että jokaisella sarakkeella voi olla jokin määritetyistä mahdollisista arvoista. Se käyttää numeeriset indeksit (1, 2, 3…) edustamaan merkkijonoarvoja.

MySQL ENUM-tietotyyppi sisältää seuraavat edut:

  • Kompakti tiedon tallennus, jossa sarakkeessa voi olla rajoitettu joukko määritettyjä mahdollisia arvoja. Tässä merkkijonoarvoja käytetään automaattisesti numeerisena indeksinä.
  • Se mahdollistaa luettavat kyselyt ja tulosteet, koska numerot voidaan kääntää uudelleen vastaavaksi merkkijonoksi.
  • Se voi hyväksyä monia tietotyyppejä, kuten kokonaisluku, liukuluku, desimaali ja merkkijono.

Syntaksi

Seuraavassa on syntaksi, jota käytetään määrittämään ENUM-tietotyyppi sarakkeessa:

 CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );  

Yllä olevassa syntaksissa olemme määrittäneet vain kolme ENUM-arvoa, mutta sitä voidaan kasvattaa tarpeidemme mukaan. Tässä meidän on varmistettava, että luetteloarvot pysyvät aina sisällä lainattu merkkijono literaali .

MySQL antaa meille mahdollisuuden määrittää ENUM-tietotyypin seuraavilla attribuuteilla:

EI TYHJÄ: Oletuksena ENUM-tietotyyppi on NULL. Jos emme halua sallia NULL-arvoja, on käytettävä NOT NULL -ominaisuutta määritettäessä ENUM-saraketta.

TYHJÄ: Se on synonyymi sanalle DEFAULT NULL, ja sen indeksiarvo on aina NULL.

OLETUS: Kun arvoa ei ole määritetty sarakkeessa, ENUM-tietotyyppi lisää oletusarvon. Toisin sanoen, jos INSERT-käsky ei anna arvoa tälle sarakkeelle, oletusarvo lisätään. DEFAULT-lauseke ei salli funktion lisäämistä. ENUM-tietotyyppi My SQL:ssä sisältää OLETUSarvot muodossa NULL tai tyhjä merkkijono ('').

MySQL ENUM esimerkki

Ymmärrämme, kuinka ENUM-tietotyyppi toimii MySQL:ssä seuraavan kuvan avulla. Täällä aiomme luoda taulukon nimeltä ' paidat joka sisältää kolme saraketta: id, name ja size.

Kokosarake käyttää ENUM-tietotyyppiä, ja sen koko on pieni, keskikokoinen, suuri ja x-large. MySQL kartoittaa nämä luettelointijäsenet numeeriseen indeksiin, jossa pieni = 1, keskikokoinen = 2, suuri = 3 ja x-large = 4. Luo taulukko suorittamalla seuraava kysely:

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );  

Seuraavaksi meidän täytyy lisää arvot taulukkoon. Lisäyksen aikana luetteloarvot voidaan lisätä joko merkkijonoliteraalina tai sen numeerisina indekseinä, ja molemmat ovat samoja. Suorita seuraava käsky lisätäksesi arvot taulukkoon:

 INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');  

Suorita nyt SELECT-käsky nähdäksesi taulukkoon lisätyt arvot:

 mysql> SELECT * FROM shirts;  

Seuraava kuva sisältää kaikki yllä olevat kyselytulokset, jotka sisältävät luettelointiarvot vain merkkijonoliteraaaleina:

MySQL ENUM

ENUM Lajittelu

MySQL lajittelee luettelointiarvot niiden numeeristen indeksien perusteella, jotka riippuvat siitä, missä järjestyksessä olemme lisänneet tiedot sarakemäärityksessä. Esimerkiksi , jos olemme määrittäneet luettelon ENUM:ksi ('b', 'a', ', 'c'). Sitten b tulee ennen a, tyhjä merkkijono ennen c (ei-tyhjä merkkijono) ja NULL-arvo tulee ennen muita arvoja.

Joten jos emme halua saada odottamatonta tulosta ENUM-tietotyypillä käyttämällä ORDER BY -lausetta, noudata näitä sääntöjä:

  • Määritä luetteloarvot aakkosjärjestyksessä.
  • On varmistettava, että sarakkeen nimi on leksikaalisessa järjestyksessä indeksinumeron sijaan.

Seuraava esimerkki selittää luettelon lajittelun selkeämmin. Joten jos haluat saada paitojen koon tietyssä järjestyksessä, suorita alla oleva lauseke:

 mysql> SELECT * FROM shirts ORDER BY size DESC;  

Tämä kysely antaa alla olevan tulosteen, josta voimme nähdä, että paitojen koko on laskevassa järjestyksessä:

MySQL ENUM

ENUM-tietotyypin rajoitukset

Seuraavat ovat ENUM-tietotyypin haitat MySQL:ssä:

1. Jos haluamme muokata luettelon arvoja/jäseniä, se voidaan tehdä rakentamalla koko taulukko uudelleen komennolla ALTER TABLE. Se kuluttaa myös resurssejamme ja aikaamme kallista.

2. Emme voi käyttää lauseketta, jossa on luettelon jäseniä. Esimerkiksi tätä CREATE-käskyä ei suoriteta, koska se käyttää CONCAT()-funktiota luettelon jäsenten luomiseen.

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );  

3. Emme voi käyttää käyttäjämuuttujaa luettelointijäsenenä. Se näkyy alla olevassa esimerkissä:

 SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );  

4. On suositeltavaa, että emme käytä numeerisia arvoja luettelon jäseninä.

5. Täydellisen tietojen luettelointiluettelon saaminen on monimutkaista, koska meidän on käytettävä information_schema-tietokantaa.

6. Saatamme kohdata ongelman siirrettäessä ENUM:a muihin RDBMS-järjestelmiin, koska monet tietokannat eivät tue tätä tietotyyppiä.

7. Emme voi lisätä attribuutteja luettelointiluetteloihin.