简单介绍
SET类型
在创建表时,就指定SET类型的取值范围。
属性名 SET('值1','值2','值3'...,'值n')
其中,“属性名”参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是有64个元素构成的组合,根据成员的不同,存储上也有所不同:
1~8成员的集合,占1个字节。
9~16成员的集合,占2个字节。
17~24成员的集合,占3个字节。
25~32成员的集合,占4个字节。
33~64成员的集合,占8个字节。
同ENUM类型一样,列表中的每个值都有一个顺序排列的编号。MySQL中存入的是这个编号,而不是列表中的值。插入记录时,SET字段中的元素顺序无关紧要。存入MySQL数据库后,数据库系统会自动按照定义时的顺序显示。如果插入的成员中有重复,则只存储一次。
比如:
drop table if EXISTS test2; create table test2( user varchar(30), sex SET('male','female') )ENGINE=INNODB; insert into test2 select 'haha1','male'; insert into test2 select 'haha2','female'; insert into test2 select 'haha3','nofemal';
最后一行会报错
原因也是因为’nofemal’不是他们其中的’male’和’female’不是其中的任何一个
ENUM类型
ENUM类型的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于256~65535个成员,需要2个字节存储。最多可以有65535个成员,而SET类型最多只能包含64个成员。两者的取值只能在成员列表中选取。ENUM类型只能从成员中选择一个,而SET类型可以选择多个。因此,对于多个值中选取一个的,可以选择ENUM类型。例如,“性别”字段就可以定义成ENUM类型,因为只能在“男”和“女”中选其中一个。对于可以选取多个值的字段,可以选择SET类型。例如,“爱好”字段就可以选择SET类型,因为可能有多种爱好。
属性名 ENUM('值1','值2','值3'...'值n')
drop table if EXISTS test; create table test( user varchar(30), sex enum('male','female') )ENGINE=INNODB; insert into test select 'haha1','male'; insert into test select 'haha2','female'; insert into test select 'haha3','nofemal';
注意:
ENUM和SET类型都是集合类型,不同的是ENUM类型最多可枚举65535个元素,而SET类型最多枚举64个元素。且set中可以存set枚举中的组合,比如执行
insert into test2 select ‘haha4’,’ 'male', 'female'’;
这样也是成功的