Trong MySQL, enum (viết tắt của “enumeration”) là một kiểu dữ liệu đặc biệt cho phép lưu trữ một trong số các giá trị đã được định nghĩa trước đó. Kiểu dữ liệu này được sử dụng khi bạn muốn hạn chế giá trị của một cột chỉ có thể thuộc một tập hợp cụ thể.

Cú pháp của ENUM

CREATE TABLE your_table_name (
    your_column_name ENUM('value1', 'value2', 'value3', ...) 
);

Đặc điểm của ENUM trong MySQL

  • Giá trị giới hạn: Cột có kiểu enum chỉ có thể chứa một trong những giá trị đã định nghĩa. Ví dụ, nếu cột đó là ENUM('A', 'B', 'C'), bạn chỉ có thể nhập giá trị là 'A', 'B', hoặc 'C' vào cột này.
  • Lưu trữ dưới dạng số: Bên trong MySQL, các giá trị của kiểu enum thực chất được lưu trữ dưới dạng số nguyên (bắt đầu từ 1). Ví dụ, với ENUM('A', 'B', 'C'), 'A' sẽ được lưu là 1, 'B' là 2, và 'C' là 3. Nếu giá trị lưu trữ không khớp, MySQL có thể lưu giá trị trống tương ứng với 0.
  • Giá trị mặc định: Có thể chỉ định giá trị mặc định khi tạo cột. Nếu không chỉ định giá trị mặc định, trường có thể nhận giá trị NULL (nếu cho phép).

Ví dụ

Giả sử bạn có một bảng quản lý thông tin nhân viên, trong đó trạng thái của nhân viên chỉ có thể là “active”, “inactive”, hoặc “pending”. Bạn có thể sử dụng ENUM để giới hạn các giá trị nhập vào cho cột status:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    status ENUM('active', 'inactive', 'pending') NOT NULL DEFAULT 'pending'
);

  • Cột status chỉ có thể nhận ba giá trị 'active', 'inactive', hoặc 'pending'.
  • Giá trị mặc định cho status'pending'.

Lợi ích của ENUM

  • Bảo toàn dữ liệu: Giúp ngăn chặn việc nhập giá trị không hợp lệ vào cơ sở dữ liệu.
  • Tiết kiệm không gian lưu trữ: Do các giá trị enum được lưu trữ dưới dạng số, chúng có thể tiết kiệm không gian hơn so với việc lưu trữ dưới dạng chuỗi ký tự.

Nhược điểm của ENUM

  • Giới hạn trong sửa đổi: Việc thêm hoặc thay đổi các giá trị enum yêu cầu phải thay đổi cấu trúc bảng, điều này có thể gây ra các vấn đề hiệu năng khi dữ liệu lớn.
  • Khó khăn trong bảo trì: Nếu bạn cần cập nhật danh sách giá trị thường xuyên, ENUM có thể gây phức tạp vì phải thực hiện thay đổi trực tiếp trên cấu trúc bảng.

Kết luận

Kiểu dữ liệu enum trong MySQL phù hợp để sử dụng khi bạn muốn giới hạn các giá trị có thể chấp nhận trong một cột cụ thể, đồng thời dễ dàng lưu trữ và tiết kiệm không gian. Tuy nhiên, cần cân nhắc kỹ khi sử dụng vì việc thay đổi hoặc mở rộng các giá trị enum có thể phức tạp.