“了解MySQL中的enum枚举数据类型“

目录

[# 开篇](# 开篇)

[1. 创建包含枚举类型的表](#1. 创建包含枚举类型的表)

[2. 插入枚举类型的数据](#2. 插入枚举类型的数据)

[3. 查询包含枚举类型的表](#3. 查询包含枚举类型的表)

[4. 更新枚举类型的数据](#4. 更新枚举类型的数据)

[5. 使用枚举类型的好处](#5. 使用枚举类型的好处)

注意事项

示例总结

附加


# 开篇

在数据库中,枚举(ENUM)是一种数据类型,用于存储一组预定义的值。这在某些情况下非常有用,例如,当一个列只能包含有限的、离散的值时,使用枚举可以确保数据的完整性和一致性,并且可以简化代码。

以下是使用枚举类型的一些常见示例和用途:

1. 创建包含枚举类型的表

在创建表时,可以将列定义为ENUM类型,并列出所有可能的值。例如,在xx系统中,状态列通常会使用枚举类型。

sql 复制代码
CREATE TABLE plm_change_request (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    change_content TEXT COMMENT '变更内容',
    change_reason TEXT COMMENT '变更原因',
    impact_analysis TEXT COMMENT '影响分析',
    status ENUM('pending', 'approved', 'rejected') COMMENT '状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '变更申请表';

在这个例子中,status列使用了枚举类型,只能包含'pending''approved''rejected'这三个值。

2. 插入枚举类型的数据

插入数据时,枚举列只能接受预定义的值。

sql 复制代码
INSERT INTO plm_change_request (change_content, change_reason, impact_analysis, status) VALUES
('更换电阻型号', '现有电阻库存不足', '无重大影响', 'pending'),
('增加新电容', '改进电路设计', '需重新测试', 'approved');

3. 查询包含枚举类型的表

查询枚举列的数据与查询普通字符串数据类似。

sql 复制代码
SELECT * FROM plm_change_request WHERE status = 'pending';

4. 更新枚举类型的数据

更新枚举列的数据也与更新普通字符串数据类似。

sql 复制代码
UPDATE plm_change_request SET status = 'approved' WHERE id = 1;

5. 使用枚举类型的好处

  • 数据完整性:通过限制列的值为预定义的一组值,可以防止插入或更新无效数据。
  • 性能:在某些数据库系统中,枚举类型的存储和检索效率可能高于字符串类型,因为枚举值通常存储为内部整数代码。
  • 可读性:枚举值可以使数据更具可读性和理解性,因为它们通常代表一些有意义的状态或类别。

注意事项

  • 扩展性:在需要频繁添加或修改可能值的情况下,枚举类型可能不太适用,因为更改枚举值需要修改表结构。
  • 移植性:某些数据库系统可能不支持枚举类型,或者实现方式有所不同。在跨数据库系统时需要注意这一点。

示例总结

以下是一个完整的表定义和使用枚举类型的示例,展示了从创建表到查询和更新数据的完整过程。

sql 复制代码
-- 创建表
CREATE TABLE plm_project_task (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    task_name VARCHAR(100) NOT NULL COMMENT '任务名称',
    description TEXT COMMENT '任务描述',
    start_date DATE COMMENT '开始日期',
    end_date DATE COMMENT '结束日期',
    status ENUM('not started', 'in progress', 'completed') COMMENT '任务状态',
    assigned_to INT COMMENT '负责人ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '项目任务表';

-- 插入数据
INSERT INTO plm_project_task (task_name, description, start_date, end_date, status, assigned_to) VALUES
('设计电路板', '设计新的电路板', '2024-06-01', '2024-06-30', 'in progress', 1),
('测试新组件', '测试新添加的组件', '2024-07-01', '2024-07-15', 'not started', 2);

-- 查询数据
SELECT * FROM plm_project_task WHERE status = 'in progress';

-- 更新数据
UPDATE plm_project_task SET status = 'completed' WHERE id = 1;

通过这种方式,我们可以在大多系统中有效地使用枚举类型来管理各种状态和分类数据。

附加

根据枚举顺序也可查询到数据;

相关推荐
2301_781571427 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
养肥胖虎8 小时前
RAG学习笔记(3):区分数据库检索与RAG的使用场景
数据库·ai·rag
_ku_ku_8 小时前
数据库系统原理 · 数据库应用开发 · 自学总结
数据库
长谷深风1119 小时前
索引提速秘籍【个人八股】
mysql·b+树·索引·索引设计原则·存储引擎优化·索引维护成本·字段选择策略
No8g攻城狮9 小时前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
山峰哥9 小时前
SQL慢查询调优实战:从全表扫描到索引覆盖的完整复盘
前端·数据库·sql·性能优化
Irene19919 小时前
在 WSL 中下载安装 MySQL,连接到 SQLyog(MySQL 安装在 WSL vs Windows 本地对比)
mysql·wsl
代码中介商9 小时前
Redis入门:5大数据类型全解析
数据库·redis·缓存
渣渣盟10 小时前
数据库设计范式详解(纯小白版)
数据库·oracle·软考·数据库工程师
夜雪闻竹11 小时前
Cursor 对话导入:解析 SQLite 里的宝藏
数据库·sqlite·ai编程