Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

ENUM với NOT NULL trong MySQL: Giá trị mặc định

Hành vi khác biệt

Kiểu ENUM trong MySQL có hành vi mặc định phụ thuộc vào NOT NULL:

Định nghĩa cộtGiá trị mặc định khi INSERT không chỉ định
ENUM('YES','NO')NULL
ENUM('YES','NO') NOT NULLGiá trị đầu tiên của ENUM ('YES')

Case 1: ENUM cho phép NULL

CREATE TABLE DemoTable1 (isMarried ENUM('YES','NO'));
INSERT INTO DemoTable1 VALUES (); -- không chỉ định giá trị
SELECT * FROM DemoTable1;

Kết quả:

+-----------+
| isMarried |
+-----------+
| NULL      |
+-----------+

Case 2: ENUM NOT NULL

CREATE TABLE DemoTable2 (isMarried ENUM('YES','NO') NOT NULL);
INSERT INTO DemoTable2 VALUES ();
SELECT * FROM DemoTable2;

Kết quả:

+-----------+
| isMarried |
+-----------+
| YES       |
+-----------+

Tóm tắt quy tắc

  • Không có NOT NULL: Mặc định là NULL (trừ khi có DEFAULT tường minh).
  • Có NOT NULL: Mặc định là phần tử đầu tiên của ENUM list.
  • Có DEFAULT 'value': Ghi đè cả hai trường hợp trên.

Best Practice

  • Luôn khai báo NOT NULL + DEFAULT 'giá_trị_mong_muốn' để tránh surprise.
  • Ví dụ: status ENUM('active','inactive','pending') NOT NULL DEFAULT 'pending'.
  • Tránh phụ thuộc vào hành vi mặc định ngầm (implicit default).

Lưu ý thêm

  • ENUM lưu trữ dưới dạng số nguyên nội bộ (1, 2, 3... theo thứ tự khai báo).
  • Sắp xếp ENUM theo thứ tự khai báo, không theo alphabet.
  • MySQL 8.0.16+ hỗ trợ CHECK constraint có thể thay thế ENUM cho một số trường hợp.