Типът данни ENUM в MySQL е a низов обект . Това ни позволява да ограничим стойността, избрана от списък с разрешени стойности в спецификацията на колоната по време на създаването на таблицата. Това е съкращение от изброяване , което означава, че всяка колона може да има една от зададените възможни стойности. То използва цифрови индекси (1, 2, 3…) за представяне на низови стойности.
MySQL Типът данни ENUM съдържа следните предимства:
- Компактно съхранение на данни, където колоната може да има ограничен набор от определени възможни стойности. Тук стойностите на низа автоматично се използват като числов индекс.
- Той позволява четливи заявки и изход, тъй като числата могат да бъдат преведени отново в съответния низ.
- Може да приема много типове данни като цяло число, с плаваща запетая, десетична запетая и низ.
Синтаксис
По-долу е синтаксисът, използван за дефиниране на тип данни ENUM в колоната:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
В горния синтаксис сме дефинирали само три стойности на ENUM, но те могат да бъдат увеличени според нашите нужди. Тук трябва да се уверим, че стойностите за изброяване винаги трябва да остават вътре в цитиран низов литерал .
MySQL ни позволява да дефинираме типа данни ENUM със следните атрибути:
НЕ NULL: По подразбиране типът данни ENUM е NULL. Ако не искаме да разрешим NULL стойностите, се изисква да използваме свойството NOT NULL, докато указваме колоната ENUM.
НУЛА: Това е синоним на DEFAULT NULL и стойността на неговия индекс винаги е NULL.
ПО ПОДРАЗБИРАНЕ: Когато дадена стойност не е посочена в колоната, типът данни ENUM вмъква стойността по подразбиране. С други думи, ако операторът INSERT не предоставя стойност за тази колона, тогава ще бъде вмъкната стойността по подразбиране. Изразът DEFAULT не позволява вмъкване на функция. Типът данни ENUM в My SQL включва стойностите DEFAULT като NULL или празен низ ('').
Пример за MySQL ENUM
Нека разберем как работи типът данни ENUM в MySQL със следната илюстрация. Тук ще създадем таблица с име ' ризи “, който съдържа три колони: id, name и size.
Колоната за размер използва типа данни ENUM и има малки, средни, големи и x-големи размери. MySQL картографира тези членове на изброяването към числов индекс, където малък = 1, среден = 2, голям = 3 и x-голям = 4 съответно. Изпълнете следната заявка, за да създадете таблица:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
След това трябва да вмъкнете стойностите в таблицата. По време на вмъкване стойностите на изброяването могат да бъдат вмъкнати или като низов литерал, или като негови числови индекси, като и двете са еднакви. Изпълнете следния оператор, за да вмъкнете стойностите в таблицата:
sts изтегляне
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Сега изпълнете израза SELECT, за да видите вмъкнатите стойности в таблицата:
mysql> SELECT * FROM shirts;
Следното изображение съдържа всички горепосочени резултати от заявката, които съдържат стойностите за изброяване само в низови литерали:
ENUM Сортиране
MySQL сортира стойностите на изброяването въз основа на техните цифрови индекси, които зависят от реда, в който сме вмъкнали данните в спецификацията на колоната. Например , ако сме дефинирали изброяването като ENUM ('b', 'a', '', 'c'). Тогава b идва преди a, празният низ идва преди c (непразен низ), а NULL стойността идва преди други стойности.
Така че, ако не искаме да получим неочакван резултат с тип данни ENUM, използвайки клауза ORDER BY, следвайте тези правила:
- Определете изброените стойности по азбучен ред.
- Целта е да се уверите, че името на колоната е в лексикален ред, а не в номер на индекс.
Следващият пример обяснява сортирането чрез изброяване по-ясно. Така че, ако искате да получите размера на ризите в определен ред, изпълнете оператора по-долу:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Тази заявка ще даде изход, както е показано по-долу, където можем да видим, че размерът на ризите е в низходящ ред:
Ограничения на типа данни ENUM
Следните са недостатъците на типа данни ENUM в MySQL:
1. Ако искаме да променим стойностите/членовете на изброяването, това може да стане чрез повторно изграждане на цялата таблица с помощта на командата ALTER TABLE. Освен това използва нашите ресурси и време скъпо.
2. Не можем да използваме израз с членове на изброяване. Например този оператор CREATE не се изпълнява, защото използва функцията CONCAT() за създаване на членове на изброяването.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Не можем да използваме потребителската променлива като член на изброяването. Може да се види в примера по-долу:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Препоръчително е да не използваме числовите стойности като членове на изброяването.
5. Сложно е да се получи пълен списък с изброяване на информация, защото трябва да имаме достъп до базата данни information_schema.
6. Може да се сблъскаме с проблем по време на пренасянето на ENUM към други RDBMS, тъй като много бази данни не поддържат този тип данни.
7. Не можем да добавяме повече атрибути към списъците с изброяване.