Tip podataka ENUM u MySQL-u je a string objekt . Omogućuje nam da ograničimo vrijednost odabranu s popisa dopuštenih vrijednosti u specifikaciji stupca u trenutku stvaranja tablice. To je skraćenica za nabrajanje , što znači da svaki stupac može imati jednu od navedenih mogućih vrijednosti. Koristi se numerički indeksi (1, 2, 3…) za predstavljanje vrijednosti niza.
odjava u git-u
MySQL Tip podataka ENUM ima sljedeće prednosti:
- Kompaktna pohrana podataka gdje stupac može imati ograničen skup navedenih mogućih vrijednosti. Ovdje se vrijednosti niza automatski koriste kao numerički indeks.
- Omogućuje čitljive upite i izlaz jer se brojevi mogu ponovno prevesti u odgovarajući niz.
- Može prihvatiti mnoge vrste podataka kao što su cijeli brojevi, pokretni zarez, decimalni i nizovi.
Sintaksa
Sljedeća je sintaksa koja se koristi za definiranje tipa podataka ENUM u stupcu:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
U gornjoj sintaksi definirali smo samo tri ENUM vrijednosti, ali se mogu povećati prema našim potrebama. Ovdje moramo osigurati da se vrijednosti nabrajanja uvijek drže unutar citatni string literal .
MySQL nam omogućuje da definiramo tip podataka ENUM sa sljedećim atributima:
NIJE NULL: Prema zadanim postavkama, tip podataka ENUM je NULL. Ako ne želimo dopustiti NULL vrijednosti, potrebno je koristiti svojstvo NOT NULL dok specificiramo stupac ENUM.
NULL: To je sinonim za DEFAULT NULL, a njegova vrijednost indeksa je uvijek NULL.
ZADANO: Kada vrijednost nije navedena u stupcu, tip podataka ENUM umeće zadanu vrijednost. Drugim riječima, ako naredba INSERT ne daje vrijednost za ovaj stupac, bit će umetnuta zadana vrijednost. DEFAULT izraz ne dopušta umetanje funkcije. Tip podataka ENUM u My SQL-u uključuje DEFAULT vrijednosti kao NULL ili prazan niz ('').
Primjer MySQL ENUM
Razmotrimo kako tip podataka ENUM radi u MySQL-u pomoću sljedeće ilustracije. Ovdje ćemo stvoriti tablicu pod nazivom ' košulje ' koja sadrži tri stupca: id, naziv i veličina.
Stupac veličine koristi tip podataka ENUM i ima male, srednje, velike i x-velike veličine. MySQL preslikava ove članove enumeracije u numerički indeks gdje je small=1, medium=2, large=3 i x-large=4 redom. Izvršite sljedeći upit za izradu tablice:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Dalje, trebamo umetnuti vrijednosti u tablicu. Tijekom umetanja, vrijednosti enumeracije mogu se umetnuti ili kao literal niza ili kao njegovi numerički indeksi, a obje su iste. Izvršite sljedeću naredbu za umetanje vrijednosti u tablicu:
ups
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Sada izvršite naredbu SELECT da vidite umetnute vrijednosti u tablicu:
mysql> SELECT * FROM shirts;
Sljedeća slika sadrži sve gore navedene rezultate upita koji sadrže vrijednosti nabrajanja samo u literalima niza:
ENUM Sortiranje
MySQL sortira enumeracijske vrijednosti na temelju njihovih numeričkih indeksa koji ovise o redoslijedu kojim smo umetnuli podatke u specifikaciju stupca. Na primjer , ako smo definirali nabrajanje kao ENUM ('b', 'a', '', 'c'). Zatim, b dolazi ispred a, prazan niz dolazi ispred c (neprazan niz), a NULL vrijednost dolazi prije ostalih vrijednosti.
Dakle, ako ne želimo dobiti neočekivani rezultat s tipom podataka ENUM koristeći klauzulu ORDER BY, slijedite ova pravila:
pretvoriti string datum
- Definirajte vrijednosti nabrajanja abecednim redom.
- To je kako bi bili sigurni da je naziv stupca u leksičkom redu, a ne u indeksnom broju.
Sljedeći primjer jasnije objašnjava sortiranje nabrajanja. Dakle, ako želite dobiti veličinu košulja određenim redoslijedom, izvršite naredbu u nastavku:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Ovaj upit će dati rezultat kao ispod gdje možemo vidjeti da je veličina košulja u silaznom redoslijedu:
Ograničenja vrste podataka ENUM
Sljedeći su nedostaci tipa podataka ENUM u MySQL-u:
1. Ako želimo modificirati vrijednosti/članove nabrajanja, to se može učiniti ponovnom izgradnjom cijele tablice pomoću naredbe ALTER TABLE. Također skupo koristi naše resurse i vrijeme.
2. Ne možemo koristiti izraz s članovima nabrajanja. Na primjer, ova izjava CREATE se ne izvršava jer koristi funkciju CONCAT() za stvaranje članova enumeracije.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Ne možemo koristiti korisničku varijablu kao član enumeracije. Može se vidjeti u primjeru u nastavku:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Preporuča se da ne koristimo numeričke vrijednosti kao članove nabrajanja.
5. Složeno je dobiti potpuni popis popisa informacija jer moramo pristupiti bazi podataka information_schema.
velika andhra
6. Možemo se suočiti s problemom tijekom prijenosa ENUM-a na druge RDBMS jer mnoge baze podataka ne podržavaju ovu vrstu podataka.
7. Ne možemo dodati više atributa popisnim listama.