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)

用这句试试:
alter table change column type type menu('a','b','c','d','e');看看行不

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

  • 用户在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 3.23.51 开始,当表被创建时,ENUM 值尾部的空格将会自动删除。
当为一个 ENUM 列赋值时,字母的大小写是无关紧要的。然而,以后从列中检索出来的值的大小写却是匹配于创建表时所指定的允许值。
如果在一个数字语境中检索一个ENUM,列值的索引值将被返回。例如,可以像这样使用数字值检索一个 ENUM 列:
mysql> SELECT enum_col+0 FROM tbl_name;

如果将一个数字存储到一个 ENUM 中,数字被当作为一个索引值,并且存储的值是该索引值所对应的枚举成员。(但是,这在 LOAD DATA 将不能工作,因为它视所有的输入均为字符串。) 在一个ENUM 字符串中存储数字是不明智的,因为它可能会打乱思维。
ENUM 值依照列规格说明中的列表顺序进行排序。(换句话说,ENUM 值依照它们的索引号排序。)举例来说,对于 ENUM("a", "b") "a" 排在 "b" 后,但是对于 ENUM("b", "a") , "b" 却排在 "a"之前。空字符串排在非空字符串前,NULL 值排在其它所有的枚举值前。为了防止意想不到的结果,建议依照字母的顺序定义 ENUM 列表。也可以通过使用 GROUP BY CONCAT(col) 来确定该以字母顺序排序而不是以索引值。
如果希望得到一个 ENUM 列的所有可能值,可以使用 SHOW COLUMNS FROM table_name LIKE enum_colum

/*搜索的语句,如果表名称为table1*/
$sql = "select locks from table1 where id=1";
$que = mysql_query($sql);
$row = mysql_fetch_array($que);
$re = ($row['locks'] == '0') ? '禁用' : '不禁用';
echo $re;

`aa` enum('a','b')


可以说一下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都行,数据量不大的话影响是微乎其微的。

萧山区17391915795: 如何在mysqlworkbench的表的某一字段类型是enum -
党咐归脾: 123 SELECT COLUMN_TYPE FROM information_schema.COLUMNS where TABLE_SCHEMA = 'db' and TABLE_NAME = 'table' and COLUMN_NAME = 'table';/*库名 表名 字段名自己改改*/

萧山区17391915795: 如何设置mysql中的时间类型 -
党咐归脾: Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp.Date数据类型:用来存储没有时间的日期.Mysql获取和显示这个类型的格式为“YYYY-MM-DD”.支持的时间范围为“1000-00-00”到“9999-12-31”.Datetime...

萧山区17391915795: mysql如何修改某一列的数据类型 -
党咐归脾: 你的SQL语句 alter table pet alter column sex enum("m","f"); 错了 正确的是:alter table pet change `sex` `sex` enum('m','f') not null default 'm'; 另外最好先保证你的pet表中现在sex字段的值都在m,f以内

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

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

萧山区17391915795: MySQL中怎样限制一个字段输入的值的范围 -
党咐归脾: 可以设置枚举类型enum CREATE TABLE `gender` (`Gender` enum('男','女') DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

萧山区17391915795: 如何使用sql语句修改字段类型为enum里的选项内容 -
党咐归脾: 一般来说,枚举类型在后台数据库可能有2个表:基本类型表和关系表,你在基本类型表里面加一个字段'd',再到关系表加上关系,关系表一般是树形结构的.有字段父ID:parent_id,子ID:child_id ,你在数据库表按照parent_id用原来的ID新增一个child_id记录,一般就可以了,做好后台数据库跟踪,这些语句都很容易找到的.

萧山区17391915795: mysql 如何设置逻辑型字段 -
党咐归脾: mysql里有bool类型的字段,你可以试一下

萧山区17391915795: 如何使用sql语句修改字段类型为enum里的选项内容 -
党咐归脾: 表名:test ,字段名:enm, 语句:alter table test modify column enm enum('a','b','c','d');

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

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