logo

MySQL ENUM

Тип даних 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 і має малий, середній, великий і х-великий розміри. MySQL відображає ці елементи перерахування на числовий індекс, де small=1, medium=2, large=3 і x-large=4 відповідно. Виконайте наступний запит, щоб створити таблицю:

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') ); 

Далі нам потрібно вставка значення в таблицю. Під час вставки значення перерахування можуть бути вставлені або як рядковий літерал, або як його числові індекси, і обидва є однаковими. Виконайте такий оператор, щоб вставити значення в таблицю:

 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; 

Наступне зображення містить усі наведені вище результати запиту, які містять лише значення перерахування в рядкових літералах:

MySQL ENUM

Сортування ENUM

MySQL сортує значення перерахування на основі їхніх числових індексів, які залежать від порядку, в якому ми вставили дані в специфікацію стовпця. Наприклад , якщо ми визначили перерахування як ENUM ('b', 'a', '', 'c'). Тоді b стоїть перед a, порожній рядок стоїть перед c (непорожній рядок), а значення NULL стоїть перед іншими значеннями.

Отже, якщо ми не хочемо отримати неочікуваний результат із типом даних ENUM за допомогою пропозиції ORDER BY, дотримуйтесь цих правил:

  • Визначте значення перерахування в алфавітному порядку.
  • Це необхідно для того, щоб переконатися, що ім’я стовпця розташовано в лексичному порядку, а не в індексному порядку.

У наступному прикладі більш чітко пояснюється сортування переліку. Отже, якщо ви хочете отримати розмір сорочок у певному порядку, виконайте наведений нижче оператор:

 mysql> SELECT * FROM shirts ORDER BY size DESC; 

Цей запит дасть результат, як показано нижче, де ми побачимо, що розміри сорочок розташовані в порядку спадання:

MySQL ENUM

Обмеження типу даних 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. Ми не можемо використовувати змінну користувача як член перерахування. Це можна побачити на прикладі нижче:

vlc media player завантажити youtube
 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. Ми не можемо додати більше атрибутів до списків переліку.