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)