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

Chọn hàng dùng trường ENUM trong MySQL

Truy vấn dữ liệu với cột kiểu ENUM trong MySQL

Cột ENUM chỉ chấp nhận các giá trị được định nghĩa trước, có thể là NULL nếu không đặt NOT NULL.

Tạo bảng với ENUM

mysql> create table DemoTable ( 
    EmployeeStatus ENUM('FULLTIME','Intern') default NULL 
); 
Query OK, 0 rows affected (0.66 sec)

Chèn dữ liệu

mysql> insert into DemoTable values('FULLTIME'); 
mysql> insert into DemoTable values('Intern'); 
mysql> insert into DemoTable values('Intern'); 
mysql> insert into DemoTable values();  -- NULL

Dữ liệu

+----------------+ 
| EmployeeStatus | 
+----------------+ 
| FULLTIME       | 
| Intern         | 
| Intern         | 
| NULL           | 
+----------------+

Truy vấn: Lấy nhân viên KHÔNG phải Intern (bao gồm NULL)

mysql> select * from DemoTable 
    -> where EmployeeStatus is null or EmployeeStatus <> 'Intern';

Kết quả

+----------------+ 
| EmployeeStatus | 
+----------------+ 
| FULLTIME       | 
| NULL           | 
+----------------+

Điểm quan trọng về ENUM và NULL:

  • EmployeeStatus <> 'Intern' KHÔNG khớp với NULL (NULL <> 'Intern' là UNKNOWN, không phải TRUE)
  • Phải kiểm tra IS NULL riêng biệt
  • ENUM nội bộ lưu trữ dưới dạng số (1, 2, ...), sắp xếp theo thứ tự định nghĩa

Mẹo: WHERE EmployeeStatus NOT IN ('Intern') cũng KHÔNG lấy được NULL. Luôn dùng IS NULL OR ... hoặc COALESCE(EmployeeStatus, '') <> 'Intern'.