ENUM 列舉陣列 與 SET 集合 非常類似

底下分別說明兩者類型,以及舉例說明:

ENUM

ENUM 最多可預設 65535 個成員

1-255個成員 (佔1位元) 255-65535個成員 (佔2位元)

存取資料時,只允許從預設的成員之中,挑選其中單一值

也可以用數字代表,1就代表第一個成員..以此類推

範例:

> CREATE TABLE enum_demo (name VARCHAR(10), gender ENUM('M','F'));

回應:
Query OK, 0 rows affected (0.05 sec)

接下來我們插入多筆資料,並且試著插入

  • 正常的ENUM值
  • 非ENUM預設的數字值
  • 非ENUM預設的英文字母
  • 插入多個值
> INSERT INTO enum_demo (name,gender) VALUES ('jenny','F'), ('joe','M'), ('way',0), ('grown',1), ('bang',2), ('rown',100), ('honer',NULL), ('tank',''), ('show','F,M');

回應:
Query OK, 9 rows affected, 4 warnings (0.00 sec)
Records: 9  Duplicates: 0  Warnings: 4

從回應來看,可以看到插入9筆資料,但有3筆警示

檢查內容如下:

> SELECT * FROM enum_demo;

回應
+-------+--------+
| name  | gender |
+-------+--------+
| jenny | F      |
| joe   | M      |
| way   |        |
| grown | M      |
| bang  | F      |
| rown  |        |
| honer | NULL   |
| tank  |        |
| show  |        |
+-------+--------+
9 rows in set (0.00 sec)

SET

SET 預設值最多可以包含 64個成員

1-8個成員 (佔1位元) 9-16個成員 (佔2位元) ….以此類推…. 33-64個成員(佔8位元)

在存取資料時,可以多選 例如, SET 預設為 1,2,3,4 我們在插入資料時,可以是 (1,2), (2,3,4), (1), (1,3)

範例:

這裡,建立一個 set_demo 的資料表,欄位包括 name, interest 這裡的interest 設定為 set (‘a’,‘b’,‘c’,’d’);

> CREATE TABLE set_demo (name varchar(10), interest set('a','b','c','d'));

回應:
Query OK, 0 rows affected (0.03 sec)

插入幾筆資料

其中,故意插入一些非SET預設的內容

  • 重複插入兩個a
  • 插入非set預設字串,或者前面多一個空白
> INSERT INTO set_demo (name, interest) VALUES ('brown', 'a,c'), ('john', 'a,b,c,d'), ('chen', 'c'), ('tom','a,a,c'), ('home','a,u,3,#, b');

回應:
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

查看結果,重複插入兩個a 那筆資料會自動合併調重複的值

插入非set預設字串,則會自動被忽略

插入 set 預設字串,但是前面有多一個空白,也會被忽略

> SELECT * FROM set_demo;

回應:
+-------+----------+
| name  | interest |
+-------+----------+
| brown | a,c      |
| john  | a,b,c,d  |
| chen  | c        |
| tom   | a,c      |
| home  | a        |
+-------+----------+
4 rows in set (0.00 sec)