mysql中enum字段还需要创建索引吗

作者&投稿:廖航 (若有异议请与网页底部的电邮联系)
mysql怎么获取数据表字段enum类型的默认值~

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 的可以是任意字符(除了=和换行符)

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

  • 用户在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字段的作用和具体用法吗
根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号 与...

mysql的enum不能用中文嘛
不能用。mysql的enum使用中文会导致字符集出现错误,所以是不能用的。中文(Chinese)是中国的语言文字。特指汉族的语言文字,即汉语和汉字。

mysql常用的数据类型有哪些
MySQL支持所有标准SQL数值数据类型。包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。ENUM是枚举类型...

sql enum类型
enum 是枚举类型, sex 性别字段 加约束条件,默认是 ‘男’,插入数据时,sex字段只可以是'男'或'女',另外,MySQL 不支持check的,虽然语法上不会报错是,分析建表语句的时候会被忽略.

SQLServer和MySql语法和关键字的区别详解
1. MySQL支持enum,和set类型,SQL Server不支持2. MySQL不支持nchar,nvarchar,ntext类型 3. MySQL的递增语句是AUTO_INCREMENT,而MS SQL是identity(1,1) 4. MS SQL默认到处表创建语句的默认值表示是((0)),而在MySQL里面是不允许带两括号的5. MySQL需要为表指定存储类型 6. MS SQL识别符是[],[type]表示他...

mysql中想添加一个列,是表示星期几的用什么数据类型
使用1,2,3,4,5,6,7 表示或者用“周一、周二、...、周日”表示,可以考虑使用enum类型。

mysql性别显示?
男。mysql性别显示男,mysql如何查询性别结果为0,则显示男,设置一个表的字段名称为sex,字段类型为enum枚举类型,输入男女两个值,并且设置默认值为男。

MySQL 使用技巧
因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。2、使用连接(JOIN)来代替子查询(Sub-Queries)MySQL 从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中...

mysql里面的东西都是做什么用的
在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来。如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理。ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)。

在mysql中奖学金等级该用什么数据类型?
看你业务情况,这里奖学金等级应该不多,可以用enum。其实你就算用int都行,数据量不大的话影响是微乎其微的。

庆安县13930617822: mysql中enum字段还需要创建索引吗 -
令纯复方: 你看看你的程序 如果查询的条件中没有用到主键,可以将你的查询字段设置为索引.如果你想在主键上设置索引的话,不需要了,主键就有索引的功能

庆安县13930617822: sql enum类型 -
令纯复方: 1enum 是枚举类型, sex 性别字段 加约束条件,默认是 '男',插入数据时,sex字段只可以是'男'或'女',另外,MySQL 不支持check的,虽然语法上不会报错是,分析建表语句的时候会被忽略.

庆安县13930617822: mysql最好的优化技巧 -
令纯复方: 展开全部1、选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例...

庆安县13930617822: mysql里面的ENUM函数 -
令纯复方: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量说明为整型,字符型或其它类型...

庆安县13930617822: mysql中总用enum类型是不是不太好啊? -
令纯复方: ENUM 类型对于发询问题不年夜,最年夜的就是后期若是增添了一个类型,必需加到最后.

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

庆安县13930617822: 如何在mysql中创立有值约束的表? -
令纯复方: `yourfield` tinyint(1) ENUM('3','5') NOT NULL 这样可以限制字段只能写3和5.

庆安县13930617822: 可以说一下MYSQL中Enum字段的作用和具体用法吗 -
令纯复方: ENUM是枚举类型,它虽然只能保存一个值但却能够处理最多达 65,535 个预定义的值.

庆安县13930617822: 如何使用sql语句修改字段类型为enum里的选项内容 -
令纯复方: 表名:test ,字段名:enm, 语句:alter table test modify column enm enum('a','b','c','d');

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网