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

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

附加

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

相关推荐
PGCCC8 分钟前
【PGCCC】Postgresql 存储设计
数据库·postgresql
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
远歌已逝5 小时前
管理Oracle实例(二)
数据库·oracle
日月星宿~5 小时前
【MySQL】summary
数据库·mysql
爱吃土豆的程序员5 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
睿思达DBA_WGX5 小时前
Oracle 11g rac 集群节点的修复过程
数据库·oracle
尘浮生6 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
希忘auto6 小时前
详解MySQL安装
java·mysql