MySQL中的enum类型有什么优点

如题所述

例如下面两个字段:
name varchar(50) ,
sex enum('male' , 'female' , 'both' , 'unknow')

name 字段可以插入任意字符串。

sex 字段只允许插入 male , female , both , unknow 中的其中之一,不在范围内的值会报错。

enum 相比较 varchar 就更加规范些,你在程序中限定也一样可以做到。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-06-22

根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。

    用户在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 中,可配置项为 <property name="defaultNode"> 、<property name="mapFile"> 和 <property name="type"> 

    【配置项】2. 在 rule.xml 中配置 <property name="defaultNode"> 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会报错;若需要配置,必须为非负整数,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会路由至这个值的 MySQL 分片

    【配置项】3. 在 rule.xml 中配置 <property name="mapFile"> 标签,范围映射文件的路径:若在映射文件在 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 中配置 <property name="type"> 标签;type 必须为整型;取值为 0 时,mapFile 的<枚举值>必须为整型;取值为非 0 时,mapFile 的<枚举值>可以是任意字符(除了=和换行符)

是否推荐使用mysql的enum类型?
使用MySQL的ENUM类型在数据管理和存储方面带来了一系列的权衡。其主要优点包括数据紧凑性和可读性提升,但同时也伴随着特定的局限性。以下为使用ENUM时需注意的关键点:首先,创建和使用ENUM类型需明确指定枚举值。例如,创建一个表时,可使用以下建表语句:CREATE TABLE example (column ENUM('Mercury', '...

数据库系统最佳实践系列 --- 使用enum数据类型
其次,enum在空间利用率和查找速度方面更具优势,因为它实际存储的是数值,而非字符串,这通常能节省存储空间并提高数据处理效率。另外,有人选择在数据库表中使用数字来表示类型,然后在应用层完成数字与类型字符串之间的转换。然而,这种方法增加了应用层的开发和维护成本,并且在需要新增类型值时,需要修...

学习MySQL ENUM数据类型
MySQL中的ENUM数据类型是一种特殊的字符串对象,它在有限且固定的值范围内提供选择。它特别适合于值选择范围明确且不易变更的场景。在使用ENUM类型时,必须明确指定所有可能的值。例如,声明一个名为your_column的列,它的可能值包括'value1', 'value2', 'value3'等,列的值只能是这些预定义选项之一。

MySQL中如何使用enum类型mysql中enum使用
MySQL中的enum类型可以帮助开发者限定数据列的取值范围,有利于数据的规范化和管理。使用enum类型需要注意定义和取值范围的一致性,避免出现数据类型不匹配的错误。

MySQL数据类型测试:枚举类型ENUM测试数据总结(第六节)
MySQL数据库提供了一种特殊的数据类型:枚举类型ENUM,有助于提升性能、降低存储容量和简化程序代码理解。本文将详细探讨集合类型enum的测试过程与总结,以加深对MySQL数据库集合类型enum的理解。枚举类型ENUM 1. 数据库表mysqlops_enum结构 执行创建SQL语句以建立表,执行查询SQL语句以确认表结构信息。对比...

MySQL中的enum类型有什么优点
例如下面两个字段:name varchar(50) ,sex enum('male' , 'female' , 'both' , 'unknow')name 字段可以插入任意字符串。sex 字段只允许插入 male , female , both , unknow 中的其中之一,不在范围内的值会报错。enum 相比较 varchar 就更加规范些,你在程序中限定也一样可以做到。

MySQL枚举类型详解mysql中enum
枚举类型是在MySQL中定义列的一种有效方式,它可以帮助您在存储数据时限制可选项的范围并增强数据完整性。在使用枚举类型时,需要注意一些限制和可能导致不一致的问题。参考代码:以下代码定义一个表格和一个枚举列:CREATE TABLE mytable (id INT(11) AUTO_INCREMENT,name VARCHAR(50),gender ENUM(&#...

MySQL中如何使用enum类型mysql中enum类型
。总结 ENUM类型是MySQL中一种非常有用的数据类型,可用于将单个值存储在预定义的一组值中。在本文中,我们探讨了如何在MySQL中使用ENUM类型,并提供了一些示例代码来帮助您如何在应用程序中使用它。使用ENUM类型可以简化数据存储和管理,因此如果您经常需要存储预定义的值,则可以考虑使用它。

为什么MySQL不推荐使用枚举mysql不推荐使用枚举
2.存储空间的浪费 在MySQL中,枚举类型使用了固定的存储空间,无论该列中实际存储了多少个枚举值。例如,一个枚举类型的列中只存储了一个值,但是仍会占用全部的枚举类型的存储空间。这样会导致存储空间的浪费,尤其是当表中的数据量较大时,这种浪费就更为明显。3.查询性能的问题 当查询涉及到枚举...

MySQL数据类型测试:枚举类型ENUM测试数据总结(第六节)
MySQL数据库中的枚举类型ENUM提供了优化性能和存储的特性。本文将详述枚举类型测试的总结,包括字段定义、数据写入和查询的特性。数据库表结构通过SQL语句创建表mysqlops_enum,其结构测试表明,MySQL默认不会修改字段定义的默认值、NULL允许状态等。测试数据与总结1. 字段值处理: - 定义为非NULL的枚举字...

相似回答