“了解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;

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

附加

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

相关推荐
倔强的石头_10 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端