ENUM duomenų tipas MySQL yra a stygos objektas . Tai leidžia apriboti vertę, pasirinktą iš leidžiamų reikšmių sąrašo stulpelio specifikacijoje lentelės kūrimo metu. Tai trumpinys surašymas , o tai reiškia, kad kiekvienas stulpelis gali turėti vieną iš nurodytų galimų reikšmių. Tai naudoja skaitiniai indeksai (1, 2, 3…), kad būtų nurodytos eilutės reikšmės.
MySQL ENUM duomenų tipas turi šiuos privalumus:
- Kompaktiška duomenų saugykla, kurioje stulpelyje gali būti ribotas nurodytų galimų verčių rinkinys. Čia eilutės reikšmės automatiškai naudojamos kaip skaitinis indeksas.
- Tai leidžia skaityti užklausas ir išvestis, nes skaičiai gali būti vėl išversti į atitinkamą eilutę.
- Jis gali priimti daugybę duomenų tipų, tokių kaip sveikasis skaičius, slankusis kablelis, dešimtainis skaičius ir eilutė.
Sintaksė
Toliau pateikiama sintaksė, naudojama ENUM duomenų tipui apibrėžti stulpelyje:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
Aukščiau pateiktoje sintaksėje apibrėžėme tik tris ENUM reikšmes, tačiau ją galima padidinti pagal mūsų poreikius. Čia turime įsitikinti, kad surašymo reikšmės visada turi būti viduje citatos eilutės pažodinis .
ilgio eilutė
MySQL leidžia mums apibrėžti ENUM duomenų tipą su šiais atributais:
NE NULL: Pagal numatytuosius nustatymus ENUM duomenų tipas yra NULL. Jei nenorime leisti NULL reikšmių, nurodant stulpelį ENUM būtina naudoti ypatybę NOT NULL.
NULL: Tai yra DEFAULT NULL sinonimas, o jo indekso reikšmė visada yra NULL.
NUMATYTAS: Kai reikšmė stulpelyje nenurodyta, ENUM duomenų tipas įterpia numatytąją reikšmę. Kitaip tariant, jei sakinyje INSERT nepateikiama šio stulpelio reikšmė, tada bus įterpta numatytoji reikšmė. DEFAULT išraiška neleidžia įterpti funkcijos. ENUM duomenų tipas Mano SQL apima NUMATYTOJI reikšmes kaip NULL arba tuščią eilutę ('').
MySQL ENUM pavyzdys
Leiskite mums suprasti, kaip ENUM duomenų tipas veikia MySQL, naudodami šią iliustraciją. Čia mes sukursime lentelę pavadinimu ' marškiniai “, kuriame yra trys stulpeliai: ID, pavadinimas ir dydis.
Dydžio stulpelyje naudojamas ENUM duomenų tipas, jo dydžiai yra maži, vidutiniai, dideli ir x dideli. „MySQL“ susieja šiuos sąrašo narius į skaitinį indeksą, kur atitinkamai mažas = 1, vidutinis = 2, didelis = 3 ir x-large = 4. Norėdami sukurti lentelę, atlikite šią užklausą:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Toliau mums reikia Įdėti vertes į lentelę. Įterpimo metu išvardijimo reikšmės gali būti įterpiamos kaip eilutės literatūra arba jos skaitiniai indeksai, ir abu yra vienodi. Vykdykite šį teiginį, kad įterptumėte reikšmes į lentelę:
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Dabar vykdykite teiginį SELECT, kad pamatytumėte į lentelę įterptas reikšmes:
mysql> SELECT * FROM shirts;
Šiame paveikslėlyje yra visi aukščiau pateikti užklausos rezultatai, kuriuose yra tik eilučių literalų išvardinimo reikšmės:
ENUM rūšiavimas
MySQL rūšiuoja išvardijimo reikšmes pagal jų skaitinius indeksus, kurie priklauso nuo to, kokia tvarka mes įterpėme duomenis į stulpelio specifikaciją. Pavyzdžiui , jei apibrėžėme sąrašą kaip ENUM ('b', 'a', '', 'c'). Tada b yra prieš a, tuščia eilutė yra prieš c (netuščia eilutė), o NULL reikšmė yra prieš kitas reikšmes.
sdlc gyvavimo ciklas
Taigi, jei nenorime gauti netikėto rezultato naudodami ENUM duomenų tipą naudodami ORDER BY sąlygą, laikykitės šių taisyklių:
- Apibrėžkite sąrašo reikšmes abėcėlės tvarka.
- Būtina įsitikinti, kad stulpelio pavadinimas yra leksine tvarka, o ne indekso numeriu.
Toliau pateiktame pavyzdyje aiškiau paaiškinamas sąrašo rūšiavimas. Taigi, jei norite gauti marškinių dydį tam tikra tvarka, vykdykite žemiau pateiktą teiginį:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Ši užklausa pateiks išvestį, kaip nurodyta toliau, kur matysime, kad marškinių dydis yra mažėjimo tvarka:
ENUM duomenų tipo apribojimai
Toliau pateikiami ENUM duomenų tipo trūkumai MySQL:
1. Jei norime modifikuoti surašymo reikšmes/narius, tai galima padaryti atkuriant visą lentelę naudojant komandą ALTER TABLE. Tai taip pat brangiai išnaudoja mūsų išteklius ir laiką.
2. Negalime naudoti išraiškos su surašymo nariais. Pavyzdžiui, šis CREATE sakinys nevykdomas, nes jame naudojama funkcija CONCAT() sąrašo nariams kurti.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Negalime naudoti vartotojo kintamojo kaip surašymo nario. Tai galima pamatyti toliau pateiktame pavyzdyje:
"kas yra 10 iš 100"
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Rekomenduojama nenaudoti skaitinių reikšmių kaip surašymo narių.
5. Sudėtinga gauti visą informacijos išvardijimo sąrašą, nes mums reikia prieiti prie informacijos_schemos duomenų bazės.
6. Galime susidurti su problema perkeldami ENUM į kitas RDBVS, nes daugelis duomenų bazių nepalaiko šio duomenų tipo.
7. Negalime įtraukti daugiau atributų į išvardijimo sąrašus.