MySQL 集合类型。
- 集合类型 ENUM 和 SET
- ENUM 类型最多允许65536个值
- SET 类型最多允许64个值
- 通过 sql_mode 参数可以用户约束检查
sql_mode
mysql> create table test_col (
-> user varchar(10),
-> sex enum('male', 'female') -- 虽然写的是字符串,单其实存储的整型,效率还是可以的
-> );
mysql> insert into test_col values ("tom", "male");
Query OK, 1 row affected (0.02 sec)
mysql> insert into test_col values ("tom", "xmale"); -- 不是male 和 female
Query OK, 1 row affected, 1 warning (0.03 sec) -- 如果sql_mode是非严格模式,只会有warning,并且插入的是空
mysql> set sql_mode='strict_trans_tables'; -- 设置为严格模式
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> insert into test_col values ("tom", "xmale");
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
集合类型的排序
mysql> create table test_col_sort(
-> user char(10),
-> type enum('aaa','zzz','bbb','yyy','fff') -- aaa=0, zzz=1, bbb=2, yyy=3, fff=4
-> );
Query OK, 0 rows affected (0.20 sec)
mysql> select * from test_col_sort order by type asc; -- 以type作为key,进行升序排序
+-------+------+
| user | type |
+-------+------+
| user1 | aaa | -- 0
| user4 | zzz | -- 1
| user2 | bbb | -- 2
| user3 | yyy | -- 3
+-------+------+ -- 枚举类型实际是整型数据,按照插入顺序进行排列
4 rows in set (0.00 sec)
--
-- 使用ascii排序
--
mysql> select * from test_col_sort order by cast(type as char) asc; -- 使用cast()函数转换成某种型
+-------+------+ -- 这里我们转成char型
| user | type | -- 然后进行排序(ascii)
+-------+------+
| user1 | aaa | -- 0
| user2 | bbb | -- 2
| user3 | yyy | -- 3
| user4 | zzz | -- 1
+-------+------+
4 rows in set (0.00 sec)
-- 或者使用concat
mysql> select * from test_col_sort order by concat(type) asc; -- concat()是连接字符串函数
+-------+------+
| user | type |
+-------+------+
| user1 | aaa | -- 0
| user2 | bbb | -- 2
| user3 | yyy | -- 3
| user4 | zzz | -- 1
+-------+------+
4 rows in set (0.00 sec)
mysql> select concat("abc", "大家好");
+----------------------------+
| concat("abc", "大家好") |
+----------------------------+
| abc大家好 |
+----------------------------+
1 row in set (0.00 sec)
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/kc2g53 来源:殷建卫 - 架构笔记
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。