mysql 枚举_详解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)

小结:

若是枚举类型字段定义为非NULL,默认的SQL_MODE模式下,插入NULL值则会报错,导致SQL语句执行失败;若是没有明确申明非NULL,则允许插入NULL值;

若是枚举类型字段的枚举值中,没有指定空格字符值,插入空格字符数据时,会出现数据截断的警告信息,但是SQL语句依然执行成功;

若是向枚举类型字段插入未在定义列表中出现的数据,则会出现数据截断的警告信息,但是SQL语句依然执行成功;

若是枚举类型定义为非NULL,向数据库表中插入新数据,但未指定枚举类型字段的值,则使用枚举类型字段定义申明的默认值,若是无显示申明则是采用枚举类型字段的枚举列表中第一个值作为默认值;

c). 查询数据库表mysqlops_enum的数据

查询枚举类型数据库表Mysqlops_enum所有的数据(注释:两个枚举类型字段都是非NULL,所以截断后的值为空格):

复制代码 代码示例:

root@localhost : test 11:23:24> SELECT * FROM Mysqlops_enum;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  1 | QA       | shanghai  |

|  2 | NA       |           |

|  4 |          | hangzhou  |

|  5 | DBA      |           |

|  6 | DBA      | shanghai  |

+----+----------+-----------+

5 rows in set (0.00 sec)

验证枚举类型字段存储的是数据对应的序列编号,而不是真实的字符串值,且序列号是与枚举类型字段值域列表中的顺序有关:

复制代码 代码示例:

root@localhost : test 11:23:57> SELECT * FROM Mysqlops_enum WHERE Work_City=0;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  2 | NA       |           |

|  5 | DBA      |           |

+----+----------+-----------+

2 rows in set (0.00 sec)

root@localhost : test 01:22:08> SELECT * FROM Mysqlops_enum WHERE Work_City=1;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  1 | QA       | shanghai  |

|  6 | DBA      | shanghai  |

+----+----------+-----------+

2 rows in set (0.00 sec)

root@localhost : test 02:40:31> SELECT * FROM Mysqlops_enum WHERE Work_City=2;

Empty set (0.00 sec)

root@localhost : test 02:40:33> SELECT * FROM Mysqlops_enum WHERE Work_City=3;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  4 |          | hangzhou  |

+----+----------+-----------+

1 row in set (0.01 sec)

root@localhost : test 02:40:34> SELECT * FROM Mysqlops_enum WHERE Work_City=4;

Empty set (0.00 sec)

root@localhost : test 02:40:36> SELECT * FROM Mysqlops_enum WHERE Work_City=5;

Empty set (0.00 sec)

root@localhost : test 02:40:37> SELECT * FROM Mysqlops_enum WHERE Work_City=6;

Empty set (0.00 sec)

root@localhost : test 04:29:07> SELECT * FROM Mysqlops_enum WHERE Job_type=7;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  4 |          | hangzhou  |

+----+----------+-----------+

1 row in set (0.00 sec)

枚举类型数据小结:

枚举类型字段定义必须为确定的值,不能为变量、函数、表达式等;

若是向枚举类型字段插入NULL值,且枚举类型的字段定义为非NULL,SQL语句会执行失败;

若是向枚举类型字段插入,其枚举列表值域中不存在的值,则会发生字段值的截断,并且用空格字符串值替代,其存储的序列编号为0;

若是枚举类型字段定义的枚举列表值域中存在空字符串值,该枚举类型字段发生字段值截断,则是会用空格值替代,但是其存储的序列号与枚举列表中存储的序列号不同,也即参考事例所示:

复制代码 代码示例:

root@localhost : test 04:37:32> SELECT * FROM Mysqlops_enum WHERE Job_type=0;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  8 |          | hangzhou  |

+----+----------+-----------+

1 row in set (0.00 sec)

root@localhost : test 04:37:35> SELECT * FROM Mysqlops_enum WHERE Job_type='';

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|  4 |          | hangzhou  |

|  8 |          | hangzhou  |

+----+----------+-----------+

2 rows in set (0.00 sec)

若是枚举类型字段定义为非NULL,且没有为该字段指定值的方式插入数据行,则把字段定义显式申明的默认值作为字段默认值,没有显式申明则把枚举列值域表中第一个值作为默认值;

若是枚举类型字段允许插入NULL值,则NULL值对应存储的序列号为NULL;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# 异运算_小学数学运算三要点:定律、法则与顺序(解析)

很多孩子的数学不好,尤其是女孩子。家长往往认定为数学不好就是孩子不擅长,能力差。其实未必,有的孩子数学不好的原因并不在于智商,而是没有理解到数学的方法与逻辑,比如小学的运算中,很多孩子并没有了解到…

如何实现一个教师与学生教学辅助平台?

在软件工程的学习过程中,我们要完成一个团体项目,关于个人教学辅助系统,对于这个,还有太多要学。对于如何实现其中的功能,我们会利用到html,css等语言来编写网页前端,同样也会用到数据库的知识。…

证明创建runnable实例和普通类时间一样长

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//证明创建runnable实例和普通类时间一样长public class Test002 { private Concurre…

mysql数据库维护_维护MySQL数据库表

在本教程中,我们将向您介绍一些非常有用的语句,使您可以在MySQL中维护数据库表。MySQL提供了几个有用的语句,可以有效地维护数据库表。 这些语句使您能够分析,优化,检查和修复数据库表。分析表语句MySQL查询优化器是My…

node-glob 正则表达式

https://github.com/isaacs/node-glob转载于:https://www.cnblogs.com/chris-oil/p/6507368.html

机器学习笔记—再谈广义线性模型

前文从线性回归和 Logistic 回归引出广义线性回归的概念,很多人还是很困惑,不知道为什么突然来个广义线性回归,有什么用?只要知道连续值预测就用线性回归、离散值预测就用 Logistic 回归不就行了?还有一些概念之间的关…

python连接access数据库odbc_对Python通过pypyodbc访问Access数据库的方法详解

看书上通过ODBC访问数据库的案例,想实践一下在Python 3.6.1中实现access2003数据库的链接,但是在导入odbc模块的时候出现了问题,后来查了一些资料就尝试着使用pypyodbc,最后成功了。操作步骤:①安装pypyodbc目前Python…

mysql异机备份

xx.xx..4.43----xx.xx..4.51 1、配置client通过密钥来连接server 43机器上: /root/.ssh 目录下执行 ssh-keygen -t rsa ls /root/.ssh会发现在/root/.ssh下生成一对密钥id_dsa和id_dsa.pub,将生成的公钥id_dsa.pub拷贝到server的/root/.ssh目录下&#…

周末想找个地方敲代码_观看我们的代码游戏,全周末直播

周末想找个地方敲代码by freeCodeCamp通过freeCodeCamp 观看我们的代码游戏,全周末直播 (Watch us Code Games Live All Weekend) Note: this was originally published on our now-defunct blog on July 15, 2015.注意:该文章最初于2015年7月15日发布在…

5.7和5.6的mysql_mysql5.6和5.7的区别

展开全部MySQL 5.7 已经开发两年了。相比 MySQL 5.6,有特别多的改进。团队主要关注速度,性能据报告是比之前62616964757a686964616fe4b893e5b19e31333365643661版本提升了 2 至 3 倍。新特性列表,主要改进:提升 MySQL 安全性改进了…

01:数制转换

01:数制转换 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...&am…

局域网只能看到一部分电脑_win10 网上邻居看不到其它电脑、共享不了文件

最近电脑遇到了局域网文件共享的问题,Win 10 系统在网络和共享中心里无法看到其他电脑,只能看到本机。确认共享已经打开后,通过查找最终解决。下面是解决流程。1.进入:控制面板 – 网络和共享中心 – 更改高级共享设置&#xff0c…

javascript 开发_25个新JavaScript开发人员的免费资源

javascript 开发by freeCodeCamp通过freeCodeCamp 25个新JavaScript开发人员的免费资源 (25 Free Resources for New JavaScript Developers) We asked our campers to share their favorite free resources for new JavaScript developers on Camper News. The list includes…

mysql数据库语法_MySQL数据库语法(一)

MySQL数据库语法数据库管理系统(DBMS)的概述什么是DBMS:数据的仓库方便查询可存储的数据量大保证数据的完整、一致安全可靠DBMS的发展:今天主流数据库为关系型数据库管理系统(RDBMS 使用表格存储数据)常见DBMS:Orcale、MySQL、SQL Server、DB…

作业1---四则运算

一.需求分析: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 1/8 7/24 运算符为 , −, , 并且要求能处理用户的输入,并判断对错,打分统计正确率。 要求能处理用户输入的真分…

python有序数组中删除元素_python刷LeetCode:26. 删除排序数组中的重复项

题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组…

mysql数据库修改数据库名称_MySQL数据库之MySQL 修改数据库名称的一个新奇方法...

本文主要向大家介绍了MySQL数据库之MySQL 修改数据库名称的一个新奇方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。MySQL在5.1引入了一个rename database操作,但在MySQL5.1.23后又不支持这个命令。可以说是一个实验性的…

Lesson 001 —— 数据

Lesson 001 —— 数据 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据是信息的表现形式和载体,可以使符号、文字、数字、语音、图像、视频等。 进制 进制也就是进…

工作记录四-etcd与flanneld

######################### etcd用来做flannld的数据中心,记录flannld各主机子网的配置## flannld使各容器实例处于同一子网内,可以相互访问####################### ### 一、etcd安装及使用## 1. 下载编译二进制包git clone https://github.com/coreos…

C#获取刚插入的数据的id

在开发程序中我们经常会遇到两个表或多个表关联同时插入数据的需求。 那么我们刚给主表插入一条数据,接着给副表插入数据时其中一个字段要存储与主表关联的id,那么我们该怎么获取刚插入的那条数据的id呢? insert infor values(,) ;SELECT Ide…