您好!欢迎访问家园网-www.jy.wang!

家园网

MySQL中ENUM和SET数据类型的用途是什么?

网络 作者:本站 点击:

ENUM 和 SET 是 MySQL 中两种专门用于定义枚举和集合类型的数据类型。它们的主要用途是限制字段的合法值,从而提高数据的完整性和一致性。以下是对 ENUM 和 SET 数据类型的详细解释,并结合代码示例说明其使用方法。

1. ENUM 数据类型

ENUM 是一种字符串对象,用于表示一个从预定义的字符串集合中选出的单一值。

优点

  • 可以确保字段的值只能是预定义的集合中的某一个。

  • 存储效率高,查询速度快。

用途

ENUM 通常用于表示具有有限选择的字段,例如状态(状态:‘active’, ‘inactive’, ‘pending’)或类别(类别:‘small’, ‘medium’, ‘large’)。

示例代码

创建一个表示用户状态的表:

CREATE DATABASE test_enum_set_db;
USE test_enum_set_db;
CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    status ENUM('active', 'inactive', 'pending') NOT NULL
);


插入数据:

INSERT INTO users (username, status) VALUES 
('alice', 'active'),
('bob', 'inactive'),
('charlie', 'pending');


检索数据:

SELECT * FROM users;


检索结果:

+---------+----------+----------+
| user_id | username | status   |
+---------+----------+----------+
|       1 | alice    | active   |
|       2 | bob      | inactive |
|       3 | charlie  | pending  |
+---------+----------+----------+


2. SET 数据类型

SET 是一种字符串对象,可以有零个或多个值,每个值必须是指定的一组值中的一个。

优点

  • 支持多个值的组合存储。

  • 可用于表示一个字段具有多个属性的情况。

用途

SET 通常用于表示具有多个可能值的字段,例如用户权限(权限:‘read’, ‘write’, ‘execute’)或兴趣(兴趣:‘sports’, ‘music’, ‘travel’)。

示例代码

创建一个表示用户兴趣的表:

CREATE TABLE user_interests (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    interests SET('sports', 'music', 'travel', 'reading', 'coding')
);


插入数据:

INSERT INTO user_interests (username, interests) VALUES 
('alice', 'sports,music'),
('bob', 'reading,coding'),
('charlie', 'travel,music,sports');


检索数据:

SELECT * FROM user_interests;


检索结果:

+---------+----------+-------------------+
| user_id | username | interests         |
+---------+----------+-------------------+
|       1 | alice    | sports,music      |
|       2 | bob      | reading,coding    |
|       3 | charlie  | travel,music,sports|
+---------+----------+-------------------+


3. 综合示例:商品管理系统

以下是一个更复杂的示例,展示了如何在商品管理系统中使用 ENUM 和 SET。

创建商品表

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    category ENUM('electronics', 'clothing', 'books', 'furniture') NOT NULL,
    tags SET('new', 'sale', 'featured', 'limited') NOT NULL
);


插入商品数据

-- 插入商品数据
INSERT INTO products (product_name, category, tags) VALUES 
('Laptop', 'electronics', 'new,featured'),
('T-shirt', 'clothing', 'sale,limited'),
('Bookshelf', 'furniture', 'new'),
('Smartphone', 'electronics', 'new,sale');


检索商品数据

-- 检索商品数据
SELECT * FROM products;


检索结果

+------------+--------------+-------------+-----------------+
| product_id | product_name | category    | tags            |
+------------+--------------+-------------+-----------------+
|          1 | Laptop       | electronics | new,featured    |
|          2 | T-shirt      | clothing    | sale,limited    |
|          3 | Bookshelf    | furniture   | new             |
|          4 | Smartphone   | electronics | new,sale        |
+------------+--------------+-------------+-----------------+


4. 注意事项

ENUM:

  • 最多可以有 65,535 个不同的值。

  • 尽量不要频繁修改 ENUM 列的定义,因为这可能需要重新定义整个表。

  • 字符串值是区分大小写的。

SET:

  • 最多可以有 64 个不同的值。

  • 每个字段可以存储多个值的组合,使用逗号分隔。

  • 如果插入的值不在预定义集合中,它们会被忽略。

小结

  • ENUM:用于存储单选值,确保字段值只能是预定义集合中的某一个,适用于状态、类别等。

  • SET:用于存储多选值,允许字段有多个预定义值的组合,适用于权限、标签、兴趣等。

通过理解 ENUM 和 SET 数据类型的用途和特点,可以更好地设计和优化数据库表,确保数据的完整性和一致性。上述示例展示了如何在实际应用中使用 ENUM 和 SET 设计数据库表,并插入和检索数据。

               

原文链接:https://blog.csdn.net/qq_43012298/article/details/139227849


标签: