天天看點

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複選