MySQL 中 ENUM 的用法
在 MySQL 中,ENUM
是一种字符串数据类型,用于列出一组预定义的值。它允许你为列指定一个有限的选项集,确保插入的数据仅限于这些选项之一。
1. 定义 ENUM 列
在创建表时,可以使用 ENUM
数据类型定义列。例如:
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
status ENUM('active', 'inactive', 'suspended') NOT NULL
);
在这个例子中,status 列只能包含 'active'、'inactive' 或 'suspended' 这三个值。
2. 插入数据
插入数据时,ENUM 列只能使用定义的值:
sql
INSERT INTO users (name, status) VALUES ('Alice', 'active');
INSERT INTO users (name, status) VALUES ('Bob', 'inactive');
如果尝试插入一个不在定义范围内的值,会导致错误:
sql
INSERT INTO users (name, status) VALUES ('Charlie', 'banned'); -- 错误
3. 修改 ENUM 列
可以使用 ALTER TABLE 命令修改 ENUM 列的定义。例如,添加一个新的选项:
sql
ALTER TABLE users MODIFY status ENUM('active', 'inactive', 'suspended', 'deleted') NOT NULL;
5. 注意事项
存储:ENUM 类型的值在内部以整数形式存储,实际存储的字节数取决于定义的值的数量(最多 65535 个值)。
排序:ENUM 值的排序顺序与定义的顺序相同。
空值:如果列定义为 NOT NULL,则必须提供有效的 ENUM 值。
性能:在某些情况下,使用 ENUM 可以提高性能,因为它使用整数存储和比较。
sql
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
category ENUM('electronics', 'furniture', 'clothing') NOT NULL
);
INSERT INTO products (name, category) VALUES ('Laptop', 'electronics');
INSERT INTO products (name, category) VALUES ('Sofa', 'furniture');
总结
ENUM 是一个方便的 MySQL 数据类型,用于限制列的值为一组预定义的字符串,确保数据的有效性和一致性。