Kiểu ENUM trong MySQL có thể được định nghĩa với các thuộc tính sau ảnh hưởng đến các giá trị cho phép:
- NOT NULL - Mặc định kiểu ENUM cho phép giá trị NULL. Để không cho phép NULL, cần sử dụng thuộc tính NOT NULL khi định nghĩa cột ENUM.
- NULL - Thuộc tính NULL là đồng nghĩa với DEFAULT NULL. Giá trị chỉ mục cho NULL là NULL.
- DEFAULT - Thuộc tính DEFAULT khiến kiểu ENUM có giá trị mặc định khi không chỉ định giá trị. Nói cách khác, câu lệnh INSERT không cần bao gồm giá trị cho trường này vì nếu không bao gồm, giá trị theo sau DEFAULT sẽ được chèn. Hàm không được phép trong biểu thức DEFAULT. Đối với kiểu ENUM, các giá trị DEFAULT bao gồm NULL và chuỗi rỗng ('').
Ví dụ
Ví dụ sau minh họa việc sử dụng các thuộc tính này với kiểu ENUM:
mysql> SET SESSION sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE enumtesting(e_value ENUM('a','1') NOT NULL DEFAULT '1', id TINYINT NOT NULL);
Query OK, 0 rows affected (0.23 sec)
mysql> INSERT INTO enumtesting(e_value, id) VALUES ('1', '1'), ('', 2), (NULL, 3), ('abc', 4);
Query OK, 4 rows affected, 3 warnings (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 3
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------+
| Warning | 1265 | Data truncated for column 'e_value' at row 2 |
| Warning | 1048 | Column 'e_value' cannot be null |
| Warning | 1265 | Data truncated for column 'e_value' at row 4 |
+---------+------+----------------------------------------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
+---------+----+
4 rows in set (0.00 sec)
mysql> INSERT INTO enumtesting(id) VALUES (5);
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
| 1 | 5 |
+---------+----+
5 rows in set (0.00 sec)
mysql> SELECT e_value, e_value+0 AS enum_index, id FROM enumtesting;
+---------+------------+----+
| e_value | enum_index | id |
+---------+------------+----+
| 1 | 2 | 1 |
| | 0 | 2 |
| | 0 | 3 |
| | 0 | 4 |
| 1 | 2 | 5 |
+---------+------------+----+
5 rows in set (0.00 sec)