1. ENUM tüübi ülevaade
Mis on ENUM tüüp?
ENUM (enumeratsioon) tüüp MySQL-is on andmetüüp, mis salvestab täpselt ühe väärtuse eelmääratud loendist. Kuna veergu saab salvestada ainult kindlalt määratletud stringe, tagab see andmete järjepidevuse ja takistab kehtetute väärtuste sisestamist.
Näiteks, kui kasutaja valib ühe võimaluse piiratud valikute hulgast, nagu sugu või tootekategooria, siis ENUM tüübi kasutamine kõrvaldab tarbetu veakontrolli loogika. Järgnevalt on näide tabeli loomisest, mis sisaldab ENUM veergu:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category ENUM('食品', '衣料品', '家電', '家具') NOT NULL
);
Selles näites võib category veerg salvestada ainult ühe järgmistest väärtustest: “食品”, “衣料品”, “家電” või “家具”. See aitab lihtsustada andmehaldust ja vähendab vale sisendi riski.
ENUM-i peamised kasutusjuhtumid
- Oleku haldamine: Töövoo etappide jälgimine, nagu “未開始”, “進行中” või “完了”.
- Kategooriate määratlemine: Eelmääratud valikute haldamine, nagu tootekategooriad, kasutajatüübid või tööpositsioonid.
- Hinnangute või tasemete rühmitamine: Mängu raskusastmed (“初級”, “中級”, “上級”) või toote hinnangud (“良い”, “普通”, “悪い”).
2. ENUM-i eelised ja puudused
Eelised
- Paranenud andmete järjepidevus: ENUM lubab ainult eelmääratud loendis olevaid väärtusi, võimaldades järjepidevat andmetöötlust. Näiteks soo haldamisel on lubatud ainult määratletud väärtused nagu “男性” või “女性”, mis takistab kehtetuid sisendeid.
- Tõhus salvestusruumi kasutamine: Iga ENUM väärtus salvestatakse sisemiselt täisarvu indeksina. Selle tulemusena võtab see vähem ruumi võrreldes VARCHAR-iga. Näiteks väärtused nagu ‘small’ või ‘large’ võtavad VARCHAR-ina rohkem ruumi, kuid ENUM salvestab need tõhusalt numbriliste indeksitega.
Puudused
- Paindlikkuse puudumine: ENUM väärtused on fikseeritud. Uute valikute lisamine nõuab tabeli struktuuri muutmist, mistõttu ENUM ei sobi sageli muutuvate andmekogude jaoks.
- Keeruline veahaldus: Kui sisestatakse kehtetu väärtus, võib MySQL tekitada vea või salvestada tühja stringi. See võib arendajate silumisprotsessi keerulisemaks muuta.
3. ENUM-i konfigureerimine ja praktiline kasutamine
Põhikonfiguratsioon ja veahaldus
ENUM tüübi konfigureerimiseks määra lihtsalt kehtivate stringide loend. Järgnevas näites defineeritakse tabelis ENUM veerg:
CREATE TABLE shirts (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('XS', 'S', 'M', 'L', 'XL') NOT NULL
);
Selles näites aktsepteerib size veerg ainult “XS”, “S”, “M”, “L” või “XL”. Püüdes sisestada väärtust, mis pole loendis (nt ‘XXL’), tekib Data truncated viga. See takistab kehtetuid andmeid ja säilitab järjepidevuse.
Praktiline kasutusnäide
Järgnevas näites kasutatakse ENUM-i kasutajarollide haldamiseks, nagu “管理者”, “一般ユーザー” ja “ゲスト”:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role ENUM('管理者', '一般ユーザー', 'ゲスト') NOT NULL
);
ENUM veeru kasutamine muudab järjepidevate õiguste ja rollipõhise kontrolli haldamise lihtsaks.

4. INDEXIMINE ja NULL-i käsitlemine ENUM-iga
Indeksite kasutamine
ENUM väärtustele omistatakse täisarvu indeksid vastavalt nende positsioonile loendis. Näiteks:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('S', 'M', 'L', 'XL')
);
“S” indeks on 1, “M” indeks on 2 jne. Neid indekseid saab kasutada WHERE lausetes:
SELECT * FROM products WHERE size = 2;
See päring toob kirjed, kus suurus vastab “M” väärtusele.
NULL-i ja tühjade stringide käsitlemine
Kui NULL on lubatud, võib veerg salvestada NULL-i kehtiva olekuna, isegi kui see ei ole ENUM loendis. Lisaks salvestatakse kehtetu andmetena sisestatud tühja stringi indeksiga 0, mis muudab valed sisendid kergesti tuvastatavaks.
5. ENUM-i tähemärgistikud ja kollatsioonid
Kuidas määrata tähemärgistikud ja kollatsioonid
ENUM, sarnaselt CHAR-i või VARCHAR-iga, toetab tähemärgi hulga ja kollatsiooni definitsioone. See on oluline mitmekeelse andmete käsitlemisel või sortimisoperatsioonidel. Näide:
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
language ENUM('日本語', '英語', '中国語')
CHARACTER SET utf8
COLLATE utf8_general_ci
);
See näide määrab UTF-8 ja üldotstarbelise kollatsiooni.
6. ENUM-i laiendamine ja alternatiivid
Tehnikad ENUM-i laiendamiseks
Kuna ENUM-il puudub paindlikkus dünaamiliste väärtuste jaoks, saate lisada „Muud“ valiku ja salvestada vaba vormi sisestust eraldi veerus:
ALTER TABLE products
MODIFY COLUMN category ENUM('食品', '衣料品', '家電', '家具', 'その他') NOT NULL,
ADD COLUMN category_other VARCHAR(255) DEFAULT NULL;
See võimaldab salvestada väärtusi, mis ei ole ENUM-i nimekirjas, säilitades samal ajal struktuuri.
Alternatiivsed andmetüübid: SET või VARCHAR
Nõuetest sõltuvalt hõlmavad alternatiive:
- SET tüüp : Salvestab mitu valikut nimekirjast.
- VARCHAR : Pakub maksimaalset paindlikkust ilma eeldefineeritud piiranguteta.


