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

Posted 彭世瑜psy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库(12):数据类型-Set集合相关的知识,希望对你有一定的参考价值。

数据类型-Set集合

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

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

语法

set(值1, 值2...)
1个字节,set只能有8个选项
2个字节,set只能有16个选项
3个字节,set只能有24个选项
8个字节,set只能有64个选项

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,否则为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
-- 以数值方式查看数字
mysql> select hobby + 0 from my_set;
+-----------+
| hobby + 0 |
+-----------+
|        11 |
|         3 |
+-----------+

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

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

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

集合的意义

  • 规范数据
  • 节省存储空间

  • enum单选
  • set复选

以上是关于MySQL数据库(12):数据类型-Set集合的主要内容,如果未能解决你的问题,请参考以下文章

set集合和list集合的区别

7python数据类型之集合set

python---数据类型---集合

6-12 varchar和char 枚举类型enum 集合set

set 数据类型

Python基础数据类型之set集合