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:
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ä:
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.