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 和 femaleQuery 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)-- 或者使用concatmysql> 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 来源:殷建卫 - 架构笔记
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
