-
Việc thay đổi tập hợp các giá trị trong ENUM yêu cầu phải có
ALTER TABLE
điều này có thể gây ra cấu trúc lại bảng - một thao tác cực kỳ tốn kém (cấu trúc lại bảng không xảy ra nếu bạn chỉ cần thêm một giá trị mới vào cuối định nghĩa ENUM, nhưng nếu bạn xóa một hoặc thay đổi thứ tự, nó sẽ xảy ra một bảng tái cấu trúc). Trong khi đó, việc thay đổi bộ giá trị trong bảng tra cứu chỉ đơn giản như CHÈN hoặc XÓA. -
Không có cách nào để liên kết các thuộc tính khác với các giá trị trong ENUM, chẳng hạn như những thuộc tính nào đã ngừng hoạt động và những thuộc tính nào đủ điều kiện để đưa vào danh sách thả xuống trong giao diện người dùng của bạn. Tuy nhiên, bảng tra cứu có thể bao gồm các cột bổ sung cho các thuộc tính đó.
-
Rất khó truy vấn ENUM để nhận danh sách các giá trị riêng biệt, về cơ bản yêu cầu bạn truy vấn định nghĩa kiểu dữ liệu từ
INFORMATION_SCHEMA
và phân tích cú pháp danh sách ra khỏi BLOB được trả về. Bạn có thể thửSELECT DISTINCT status
từ bảng của bạn, nhưng điều đó chỉ nhận các giá trị trạng thái hiện đang được sử dụng, có thể không phải là tất cả các giá trị trong ENUM. Tuy nhiên, nếu bạn giữ các giá trị trong bảng tra cứu, bạn sẽ dễ dàng truy vấn, sắp xếp, v.v.
Tôi không phải là một fan hâm mộ lớn của ENUM, như bạn có thể nói. :-)
Điều tương tự cũng áp dụng cho các ràng buộc CHECK chỉ đơn giản là so sánh một cột với một tập giá trị cố định. Mặc dù MySQL không hỗ trợ ràng buộc CHECK.
Cập nhật:MySQL 8.0.16 hiện triển khai KIỂM TRA ràng buộc .