MySQL 集合类型。

  • 集合类型 ENUM 和 SET
  • ENUM 类型最多允许65536个值
  • SET 类型最多允许64个值
  • 通过 sql_mode 参数可以用户约束检查

sql_mode

  1. mysql> create table test_col (
  2. -> user varchar(10),
  3. -> sex enum('male', 'female') -- 虽然写的是字符串,单其实存储的整型,效率还是可以的
  4. -> );
  5. mysql> insert into test_col values ("tom", "male");
  6. Query OK, 1 row affected (0.02 sec)
  7. mysql> insert into test_col values ("tom", "xmale"); -- 不是male female
  8. Query OK, 1 row affected, 1 warning (0.03 sec) -- 如果sql_mode是非严格模式,只会有warning,并且插入的是空
  9. mysql> set sql_mode='strict_trans_tables'; -- 设置为严格模式
  10. Query OK, 0 rows affected, 2 warnings (0.00 sec)
  11. mysql> insert into test_col values ("tom", "xmale");
  12. ERROR 1265 (01000): Data truncated for column 'sex' at row 1

集合类型的排序

  1. mysql> create table test_col_sort(
  2. -> user char(10),
  3. -> type enum('aaa','zzz','bbb','yyy','fff') -- aaa=0, zzz=1, bbb=2, yyy=3, fff=4
  4. -> );
  5. Query OK, 0 rows affected (0.20 sec)
  6. mysql> select * from test_col_sort order by type asc; -- type作为key,进行升序排序
  7. +-------+------+
  8. | user | type |
  9. +-------+------+
  10. | user1 | aaa | -- 0
  11. | user4 | zzz | -- 1
  12. | user2 | bbb | -- 2
  13. | user3 | yyy | -- 3
  14. +-------+------+ -- 枚举类型实际是整型数据,按照插入顺序进行排列
  15. 4 rows in set (0.00 sec)
  16. --
  17. -- 使用ascii排序
  18. --
  19. mysql> select * from test_col_sort order by cast(type as char) asc; -- 使用cast()函数转换成某种型
  20. +-------+------+ -- 这里我们转成char
  21. | user | type | -- 然后进行排序(ascii)
  22. +-------+------+
  23. | user1 | aaa | -- 0
  24. | user2 | bbb | -- 2
  25. | user3 | yyy | -- 3
  26. | user4 | zzz | -- 1
  27. +-------+------+
  28. 4 rows in set (0.00 sec)
  29. -- 或者使用concat
  30. mysql> select * from test_col_sort order by concat(type) asc; -- concat()是连接字符串函数
  31. +-------+------+
  32. | user | type |
  33. +-------+------+
  34. | user1 | aaa | -- 0
  35. | user2 | bbb | -- 2
  36. | user3 | yyy | -- 3
  37. | user4 | zzz | -- 1
  38. +-------+------+
  39. 4 rows in set (0.00 sec)
  40. mysql> select concat("abc", "大家好");
  41. +----------------------------+
  42. | concat("abc", "大家好") |
  43. +----------------------------+
  44. | abc大家好 |
  45. +----------------------------+
  46. 1 row in set (0.00 sec)

作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/kc2g53 来源:殷建卫 - 架构笔记

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。