枚举类型是计算机编程中经常用到的一种数据类型,它将一组固定的值定义为枚举元素,可以在程序中进行定义、赋值和传递。在数据库中,我们也可以将枚举类型作为字段类型,来约束某个字段的数据范围,提高数据的可靠性和一致性。本文将详细介绍数据库中的枚举类型,包括定义、使用、优缺点以及实例应用。
为沅陵等地区用户提供了全套网页设计制作服务,及沅陵网站建设行业解决方案。主营业务为成都做网站、网站制作、沅陵网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
一、枚举类型定义
在数据库中,我们可以使用 CREATE TYPE 语句来定义一个枚举类型,语法如下:
CREATE TYPE enum_name AS ENUM (‘value1’, ‘value2’, …);
其中,enum_name 为枚举类型的名称,value1、value2 是枚举元素的值,用单引号括起来,并以逗号分隔。在定义枚举类型时,值之间不能有重复的。
例如,创建一个状态枚举类型:
CREATE TYPE status_enum AS ENUM (‘ON’, ‘OFF’, ‘UNKNOWN’);
二、枚举类型使用
定义好枚举类型后,我们就可以将其作为某个表的字段类型,如下:
CREATE TABLE sample(
id INT PRIMARY KEY,
name TEXT,
status status_enum NOT NULL
);
在这里,我们将 status_enum 类型作为 sample 表中的一个字段 status 的数据类型,它的值只能是 ON、OFF 或 UNKNOWN 中的一个。
三、枚举类型优缺点
优点:
1. 限定数据范围。使用枚举类型可以限制字段的取值范围,保证数据的一致性和有效性。
2. 易于读写。使用枚举类型可以减少数据读写的复杂度,使代码更加简洁、易于维护。
3. 节省存储空间。枚举类型的值只占用极少的存储空间,可以有效地节省数据库空间。
缺点:
1. 无法动态修改。因为枚举类型是由 CREATE TYPE 定义的,所以一旦定义后,枚举元素无法动态添加和修改,只能通过 ALTER TYPE 来删除。
2. 可读性较差。对于复杂的枚举类型,如果某个字段的值并不在已定义枚举元素中,那么就无法很好地表示该字段的含义。
四、枚举类型实例应用
下面以一个简单的订单管理系统为例,说明枚举类型的实际应用。
我们定义一个枚举类型 order_status,表示订单的状态:
CREATE TYPE order_status AS ENUM (
‘CREATED’,
‘PAYED’,
‘DELIVERED’,
‘FINISHED’,
‘CANCELED’
);
然后,我们创建一个表 orders,包含订单的各项信息:
CREATE TABLE orders(
id SERIAL PRIMARY KEY,
order_no VARCHAR(20) UNIQUE NOT NULL,
user_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status order_status NOT NULL,
create_time TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
);
在这里,我们将 status 字段的数据类型定义为 order_status 枚举类型,来限制订单状态的范围。
接下来,我们可以使用 INSERT INTO 语句来插入订单记录,如下:
INSERT INTO orders(order_no, user_id, amount, status)
VALUES (‘20230101001’, 1, 100.00, ‘CREATED’);
这里将订单状态设置为 CREATED,符合 order_status 枚举类型的定义。
当我们需要查询某个状态的订单时,可以使用 WHERE 子句来筛选:
SELECT * FROM orders WHERE status=’CREATED’;
也可以使用 GROUP BY 子句来统计每个状态的订单数量:
SELECT status, COUNT(*) FROM orders GROUP BY status;
通过枚举类型的使用,我们可以更加方便地管理订单的状态,提高系统的可维护性和易读性。
枚举类型是一种非常有用的数据类型,可以帮助我们限制数据范围、提高数据一致性和可读性。在数据库中,我们可以使用 CREATE TYPE 定义枚举类型,并将其作为表的字段类型来约束数据取值。通过实际应用的例子,我们可以更加深入地理解枚举类型的优缺点和使用方法,为数据库设计带来更多的便利和可靠性。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220.做个字典表 试试。这样就不怕 忘了。
这个要看你的
枚举
, 是 仅仅一次只能选择一个的? 还是一次可以选择多个的.
例如你的
order_id order_status
SUCS(成功success)
PCES(处理process)
某行拆姿数据, 要么就是 SUCS(成功success) , 要么就是 PCES(处理process)
这种情况下, 用字毕昌符是比较合适的。
但是如果枚举是可以选择多个的, 例如:
id desc
1 无党派
2 知识分子
4 少数民族
8 女性
16 ……
这种情况下, 如果一个人, 多个枚举都满足的情况下, 那么这种情况下, 使用 数字 是比较适合的。
也就是
如果某个人,是 无党派汉族女性研究生, 那么枚旅数绝举值 = 1+2+8
一般在主表上存储的是枚举值,另建立一个值对应说明表,查询时关联取出说明内容
enum有优点。但个人觉得。。。缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好。缺点是。。enum不适合PHP。主要是PHP是弱类型,如:你insert into ….. set a= 1,你没法知道你是想 a= ‘1’ 还是 a= 1(a=’1’是插入值1,a=1是插入enum的之一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号。),这是PHP和mysql 在使用enum 更大的问题。所以。。安心点啦。干脆点直接tinyin
mysql怎么获取数据表字段enum类型的默认值
本节主要内容:
MySQL数据类型之枚举类型ENUM
MySQL数据库提供针对字符串存储的一种特殊数据类型:枚举类型ENUM,这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别介绍了布尔类型BOOL或称布尔类型BOOLEAN,以及后续会再单独介绍类型SET。
本文详细介绍类型enum测试过程与总结,加深对mysql数据库类型enum的理解记忆。
n 枚举类型ENUM
a).数据库表mysqlops_enum结构
执行数据库表mysqlops_enum创建的SQL语句:
复制代码代码示例:
root@localhost : test 11:22:29> CREATE TABLE Mysqlops_enum(ID INT NOT NULL AUTO_INCREMENT,
-> Job_type ENUM(‘DBA’,’SA’,’Coding Engineer’,’JavaScript’,’NA’,’QA’,”,’other’) NOT NULL,
-> Work_City ENUM(‘shanghai’,’beijing’,’hangzhou’,’shenzhen’,’guangzhou’,’other’) NOT NULL DEFAULT ‘shanghai’,
-> PRIMARY KEY(ID)
-> )ENGINE=InnoDB CHARACTER SET ‘utf8’ COLLATE ‘utf8_general_ci’;
Query OK, 0 rows affected (0.00 sec)
执行查询数据库表mysqlops_enum结构的SQL语句:
复制代码代码示例:
root@localhost : test 11:23:31> SHOW CREATE TABLE Mysqlops_enum\G
*************************** 1. row ***************************
Table: Mysqlops_enum
Create Table: CREATE TABLE `Mysqlops_enum` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Job_type` enum(‘DBA’,’SA’,’Coding Engineer’,’JavaScript’,’NA’,’QA’,”,’other’) NOT NULL,
`Work_City` enum(‘shanghai’,’beijing’,’hangzhou’,’shenzhen’,’guangzhou’,’other’) NOT NULL DEFAULT ‘shanghai’,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
小结:
为方便测试枚举类型,如何处理字段定义的默认值、是否允许为NULL和空值的情况,我们定义了2个枚举类型的字段名,经过对比创建与查询数据库中表的结构信息,没有发现MySQL数据库默认修改任何信息。
b). 写入不同类型的测试数据
写入一条符合枚举类型定义的记录值:
复制代码代码示例:
root@localhost : test 11:22:35> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(1,’QA’,’shanghai’);
Query OK, 1 row affected (0.00 sec)
测试第二个枚举类型字Work_City是否允许为空记录值:
复制代码代码示例:
root@localhost : test 11:22:42> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(2,’NA’,”);
Query OK, 1 row affected, 1 warning (0.00 sec)
root@localhost : test 11:22:48> SHOW WARNINGS;
++——+——+
| Level | Code | Message|
++——+——+
| Warning | 1265 | Data truncated for column ‘Work_City’ at row 1 |
++——+——+
1 row in set (0.00 sec)
测试第二个枚举类型字段Work_City是否允许存储NULL值:
复制代码代码示例:
root@localhost : test 11:22:53> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(3,’Other’,NULL);
ERROR 1048 (23000): Column ‘Work_City’ cannot be null
测试之一个枚举类型字段Job_type是否可以存储空白值:
复制代码代码示例:
root@localhost : test 11:22:59> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(4,”,’hangzhou’);
Query OK, 1 row affected (0.00 sec)
测试第二个枚举类型字段Job_City如何处理没有在定义中描述的值域之一个枚举类型字段Work_Type的默认值没指定情况下,会默认填写那个值:
复制代码代码示例:
root@localhost : test 11:23:06> INSERT INTO Mysqlops_enum(ID,Work_City) VALUES(5,’ningbo’);
Query OK, 1 row affected, 1 warning (0.00 sec)
root@localhost : test 11:23:13> SHOW WARNINGS;
++——+——+
| Level | Code | Message|
++——+——+
| Warning | 1265 | Data truncated for column ‘Work_City’ at row 1 |
++——+——+
1 row in set (0.00 sec)
测试第二个枚举类型字段未插入数据的情况下,是否能使用上字段定义中指定的默认值:
复制代码代码示例:
root@localhost : test 11:23:17> INSERT INTO Mysqlops_enum(ID,Job_type) VALUES(6,’DBA’);
Query OK, 1 row affected (0.00 sec)
根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。
用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表
在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号
与MyCat的类似分片算法对比
中间件
DBLE
MyCat
分片算法种类 enum 分区算法 分片枚举
两种中间件的枚举分片算法使用上无差别。
开发注意点
【分片索引】1. 整型数字(可以为负数)或字符串((不含=和换行符)
【分片索引】2. 枚举值之间不能重复
Male=0Male=1
或者
123=1123=2
会导致分片策略加载出错
【分片索引】3. 不同枚举值可以映射到同一个分片上
Mr=0Mrs=1Miss=1Ms=1123=0
运维注意点
【扩容】1. 增加枚举值无需数据再平衡
【扩容】2. 增加一个枚举值的分片数量数时,需要对局部数据进行迁移
【缩容】1. 减少枚举值需要数据再平衡
【缩容】2. 减少一个枚举值的分片数量数时,需要对局部数据进行迁移
配置注意点
【配置项】1. 在 rule.xml 中,可配置项为 、 和
【配置项】2. 在 rule.xml 中配置 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会报错;若需要配置,必须为非负整数,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会路由至这个值的 MySQL 分片
【配置项】3. 在 rule.xml 中配置 标签,范围映射文件的路径:若在映射文件在 DBLE_HOME/conf 或其中,则可以使用相对路径的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 时,配置值就可以简写为 map/table_map.txt;映射文件在 DBLE_HOME/conf 目录以外时,需要使用绝对路径,但这种做法需要考虑用户权限等问题,因此不建议把映射文件放在 DBLE_HOME/conf 外。
【配置项】4. 编辑 mapFile 所配置的文件
记录格式为:=
枚举值可以是整型数字,或任意字符(除了=和换行符),分片编号必须是非负整型数字,记录之间以换行分隔,一行仅能有一条记录,枚举值不能够是“DEFAULT_NODE”这个字符串,允许以“//”和“#”在行首来注释该行
【配置项】5. 在 rule.xml 中配置 标签;type 必须为整型;取值为 0 时,mapFile 的必须为整型;取值为非 0 时,mapFile 的可以是任意字符(除了=和换行符)
关于数据库中枚举类型的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
创新互联是成都专业网站建设、网站制作、网页设计、SEO优化、手机网站、小程序开发、APP开发公司等,多年经验沉淀,立志成为成都网站建设第一品牌!
分享标题:数据库中枚举类型详解(数据库中枚举类型)
URL地址:http://www.mswzjz.cn/qtweb/news1/252251.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能