MySQL数据库(12):数据类型-Set集合

举报
彭世瑜 发表于 2022/05/20 23:47:32 2022/05/20
【摘要】 数据类型-Set集合 多个数据选项可以同时保存,本质按照对应的二进制位来控制 1表示选中0表示没有选中 语法 set('值1', '值2'...) 1 1个字节,set只能有8个选项 2个字节,...

数据类型-Set集合

多个数据选项可以同时保存,本质按照对应的二进制位来控制

  • 1表示选中
  • 0表示没有选中

语法

set('值1', '值2'...)

  
 
  • 1
1个字节,set只能有8个选项
2个字节,set只能有16个选项
3个字节,set只能有24个选项
8个字节,set只能有64个选项

  
 
  • 1
  • 2
  • 3
  • 4

set和enum一样,最终存储到数据字段中的依然是数字而不是真实的字符串

create table my_set(
    hobby set('篮球', '足球', '羽毛球', '乒乓球')
);

mysql> desc my_set;
+-------+------------------------------------------------+------+-----+---------+-------+
| Field | Type                                           | Null | Key | Default | Extra |
+-------+------------------------------------------------+------+-----+---------+-------+
| hobby | set('篮球','足球','羽毛球','乒乓球')           | YES  |     | NULL    |       |
+-------+------------------------------------------------+------+-----+---------+-------+

-- 多个选项逗号隔开
insert into my_set (hobby) values ('篮球,足球,乒乓球');

mysql> select * from my_set;
+-------------------------+
| hobby                   |
+-------------------------+
| 篮球,足球,乒乓球        |
+-------------------------+

-- 数据选项与插入的顺序无关,最终会变成选项对应的顺序
insert into my_set (hobby) values ('足球,篮球');

mysql> select * from my_set;
+-------------------------+
| hobby                   |
+-------------------------+
| 篮球,足球,乒乓球        |
| 篮球,足球               |
+-------------------------+

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

数据存储的方式

系统将对应的数据选项按照顺序进行编排,从第一个开始进行占位,每一个都对应一个二进制位

数据存储的时候,如果被选中,那么对应的为的值就变为1,否则为0

系统在存储的时候,会自动将的得到的二进制反转,然后转换成十进制存储

set('篮球','足球','羽毛球','乒乓球')
      1     1       1       1

('篮球,足球,乒乓球')
      1 1 0 1
反转: 1 0 1 1  =》 1 + 2 + 8 = 11

('足球,篮球')
      1  1  0  0
反转: 0  0   1   1  =》 1 + 2 = 3

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
-- 以数值方式查看数字
mysql> select hobby + 0 from my_set;
+-----------+
| hobby + 0 |
+-----------+
|        11 |
|         3 |
+-----------+

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

可以插入数值代替实际插入

mysql> insert into my_set (hobby) values (15);

mysql> select hobby from my_set;
+-----------------------------------+
| hobby                             |
+-----------------------------------+
| 篮球,足球,乒乓球                  |
| 篮球,足球                         |
| 篮球,足球,羽毛球,乒乓球           |
+-----------------------------------+

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

集合的意义

  • 规范数据

  • 节省存储空间

  • enum单选

  • set复选

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/124884622

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。