专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > MySQL培训 > MySQL课程 > MySQL入门教程:ENUM和SET类型

MySQL入门教程:ENUM和SET类型

文章来源: 更新时间:2016/7/15 17:09:12

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

MySQL入门教程:ENUM和SET类型,ENUM和SET类型是两种特殊的字符串类型,它们有很多相似之处,使用方法也是分类系,通常都从一个在表创建时明确列举的允许值的一张表中选择,其主要的区别是ENUM列必须是值集合中的一个成员,而SET列可以包括其中的任意成员。

例如,创建如下两个串列:

color ENUM(“red”,”black”,”green”,”yellow”)

property SET(“car”,”house”,”stock”) NOT NULL

那么color和property可能的值分别为:

color:NULL、”red”、”black”、”green”和”yellow”

而property可能的值就复杂的多:

“”

“car”

“house”

“car,house”

“stock”

“car,stock”

“house,stock”

“car,house,stock”

由于空串可以表示不具备值的集合的任何一个值,所以这也是一个合法的SET值。

ENUM类型可以有65536个成员,而SET类型最多可以有64个成员。

ENUM和SET类型是如何存储的

ENUM和SET类型在数据库内部并不是用字符的方式存储的,而是使用一系列的数字,因此更为高效。

ENUM和SET类型的合法值列表的原则为:

此列表决定了列的可能合法值。

可按任意的大小写字符插入 ENUM 或 SET 值,但是列定义中指定的串的大小写字符决定了以后检索它们时的大小写。

在 ENUM 定义中的值顺序就是排序顺序。SET 定义中的值顺序也决定了排序顺序,但是这个关系更为复杂,因为列值可能包括多个集合成员。

SET 定义中的值顺序决定了在显示由多个集合成员组成的 SET 列值时,子串出现的顺序。

对于ENUM列类型,成员是从 1 开始顺序编号的。(0 被 MySQL 用作错误成员,如果以串的形式表示就是空串。)枚举值的数目决定了 ENUM 列的存储大小。一个字节可表示 256 个值,两个字节可表示 65 536 个值。因此,枚举成员的最大数目为 65 536(包括错误成员),并且存储大小依赖于成员数目是否多于 256 个。在 ENUM 定义中,可以最多指定 65 535(而不是 65 536)个成员,因为 MySQL 保留了一个错误成员,它是每个枚举的隐含成员。在将一个非法值赋给 ENUM 列时,MySQL 自动将其换成错误成员。

对于SET类型,SET 列的集合成员不是顺序编号的,而是每个成员对应 SET 值中的一个二进制位。第一个集合成员对应于 0 位,第二个成员对应于 1 位,如此等等。数值 SET 值 0 对应于空串。SET 成员以位值保存。每个字节的 8 个集合值可按此方式存放,因此 SET 列的存储大小是由集合成员的数目决定的,最多 64 个成员。对于大小为 1 到 8、9 到 16、17 到 24、25 到 32、33 到 64 个成员的集合,其 SET 值分别占用 1、2、3、4 或 8 个字节。

例如,还是上面的例子,我们从一个表中检索出ENUM和SET列的值,及其对应的数值:

对于ENUM类型的color列

SELECT color,color+0 from my_table

其结果为:

+--------+---------+
| color  | color+0 |
+--------+---------+
| NULL   | NULL   |
| black  |    2 |
| green  |    3 |
| yellow  |    4 |
| red   |    1 |
| red   |    1 |
| green  |     3 |
| green  |    3 |
| yellow |     4 |
+--------+---------+

对于SET类型的property列,同样的

SELECT property,property+0 FROM my_table;

其结果为

+-----------------+------------+
| property     | property+0 |
+-----------------+------------+
|                  0 |
| house,stock   |      6 |
| car,stock    |      5 |
| stock      |      4 |
| car,house,stock |      7 |
| car,house    |      3 |
| house      |      2 |
| car,stock      |      5 |
| house,stock   |      6 |
+-----------------+------------+

你可以仔细了解它们之间的对应关系。

因此,在给列赋值、检索时,你不仅可以使用值表中的字符串,也可以使用数值来表示一个值,例如下列语句是等价的:

INSERT my_table SET property=’car,house,stock’

INSERT my_table SET property=7

对于ENUM列也同样如此:

INSERT my_table SET color=’red’;

INSERT my_table SET color=1

本文地址:http://www.cuug.com.cn/mysql/kecheng/12482340422.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1