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

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

附加

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

相关推荐
阿维同学12 分钟前
今天不看文章,明天变垃圾(明天收费)-----字节数据分析发展过程中所遭遇的挑战
数据库·学习·安全·数据挖掘·数据分析·云计算
薛定谔的菜17 分钟前
一、Redis简介
数据库·redis·缓存
kaixin_learn_qt_ing30 分钟前
QTableView与QSqlQueryModel的简单使用
jvm·数据库·oracle
Theodore_102234 分钟前
MySQL 基础知识(4) 聚合函数
数据库·sql·mysql
LongtengGensSupreme37 分钟前
C# 中的 App.manifest 文件:优化应用程序配置与权限管理
数据库·ui·c#
无名之逆1 小时前
Rust详解日志
java·服务器·开发语言·数据库·学习·算法·rust
qqyqqyqqyqqy11 小时前
Mysql的主从复制和读写分离
数据库·mysql
威哥爱编程1 小时前
使用explain优化慢查询的业务场景分析
数据库·sql·java 基础
Obsession12341 小时前
MySQL 高级SQL高级语句(二)
数据库·sql·mysql
Al_tair1 小时前
系统架构设计师 - 数据库系统(2)
数据库·系统架构