简介:
在数据库中,我们经常会遇到枚举类型这个概念。枚举类型是一种可以定义固定选项的数据类型,它可以限制一个字段只能填写特定的值。在数据库中,枚举类型被广泛应用于需要固定优选项的地方,比如性别、婚姻状况、教育程度等。本文将从枚举类型的基本概念、定义方法、应用场景、优缺点等方面对其进行详细探析。
一、枚举类型的基本概念
枚举类型是一种定义固定选项的数据类型,通常使用关键字enum来定义。在MySQL等数据库中,枚举类型可以作为表格列定义的一部分,用于限制特定字段的值。枚举类型中的每个值代表了一项枚举值,可以设置值得别名和整数值。枚举类型在程序之间的传递很容易,不需要加入多余的程序代码。
二、枚举类型的定义方法
通常来说,枚举类型的语法比较简单,只需要使用关键字enum即可定义。下面是一个简单的枚举类型定义例子:
enum GenderEnum{ Male, Female }
在这个例子中,我们定义了一个名为GenderEnum的枚举类型,其中又定义了枚举值Male和Female。这样,我们就可以通过这个GenderEnum类型来限制一个数据库表格中个字段只能是Male或Female,其他值不允许出现。
通常来说,枚举类型会有多种“扩展定义”的方式。这些定义方式使得枚举类型更加实用和高效。例如:
1. 命名枚举:
通过给枚举项指定特定的别名来定义枚举类型。这个方法使得程序员可以增加可读性和可维护性。
enum GenderEnum{ Male = 0, Female = 1 }
2. 位域枚举:
通过将枚举值限制在一个位域中来定义枚举类型。即可以将每个可能的枚举值(即枚举项)表示为第2的几次方,一个枚举变量可以表示起多个枚举项。
enum Permissions{ Read=1, Write=2, Exec=4, All=Read|Write|Exec }
大部分情况下,我们只需要定义eunm类型,然后在表格中关联定义的枚举类型即可。例如:
CREATE TABLE student (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender GenderEnum NOT NULL,
PRIMARY KEY (`id`)
);
在这个包含了GenderEmum枚举类型的student表格中,gender字段只允许使用GenderEnum类型中定义的两个枚举值。
三、枚举类型的应用场景
枚举类型在数据库中广泛应用,通常用于以下场景:
1. 固定优选项类型字段
枚举类型通常会在数据库中用于固定优选项类型的字段。这包括性别、婚姻状况、教育程度、职业等。它们通常都只允许有固定的值,而且与其他选项互斥。
2. 提高代码可维护性
枚举类型还可以帮助提高代码的可维护性。与常量不同,枚举值会自动赋予可以改为别名的名称。这样可以使得代码更加可读,使得仅从代码本身就能够显式代码的意图。
四、枚举类型的优缺点
枚举类型在使用中也存在一些优缺点。
优点:
1. 枚举类型能够有效地限制数据库中某些项的取值范围,使得它们的使用更加灵活和安全。
2. 枚举类型通常能够提高代码的可维护性,使得代码可以显式地表达出它的意思。
缺点:
1. 枚举类型的设置过程可能没有普通整型字段那么快速和容易,因为需要同时定义每个枚举项。
2. 如果枚举项的总数很多,由于每个枚举项都可以具有命名值,所以会使得文件的体积变大,加载时会对程序增加时间和空间的成本。
五、
枚举类型在数据库中广泛应用。它们是一种极为方便的数据类型,可以限制一个字段输入的值,并且可以节省很多重复代码的编写。尽管枚举类型也存在一些缺点,例如定义和扩展成本的高昂和增加编程负担等,但在正确使用的情况下,枚举类型通常会带来更多的优点。通过熟练地掌握其语法、应用场景和优缺点,我们可以更好地使用枚举类型,并在数据处理过程中充分发挥它们的作用。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220我对MYSQL不是很了解,不过看样子应该是创建表困蠢的语句sex应该是字段名,enum(男女)应蔽尺态该表示字段限定的值只能是男和女,NOT NULL是不为空的意思,default 是返回的意思,结合起来应该是 字段名SEX 限定内容 男和女,字段值不能为空,默认是男的意思。当然以上是我根据宏源大部分编程来猜的。。
enum 是
枚举类型
, sex 尺明性别字段 加约束条件,默认是 ‘男’,插入数据时,sex字段只可以是’镇仔男’或’女’,另外,MySQL 不支持check的陵旅告,虽然语法上不会报错是,分析建表语句的时候会被忽略.
根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。
用户在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 的可以是任意字符(除了=和换行符)
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 的可以是任意字符(除了=和换行符)
数据库有枚举类型数据的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库有枚举类型数据,数据库中的枚举数据类型探析,sql enum类型,mysql怎么获取数据表字段enum类型的默认值的信息别忘了在本站进行查找喔。
成都创新互联科技有限公司,经过多年的不懈努力,公司现已经成为一家专业从事IT产品开发和营销公司。广泛应用于计算机网络、设计、SEO优化、关键词排名等多种行业!
当前题目:数据库中的枚举数据类型探析(数据库有枚举类型数据)
URL分享:http://www.csdahua.cn/qtweb/news35/471535.html
成都网站优化推广公司_创新互联,为您提供关键词优化、网站维护、建站公司、定制网站、全网营销推广、域名注册
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网