mysql SET类型的用法(附带实例)
MySQL 中的 SET 是一个字符串对象,可以有 0 个或多个值。SET 列最多可以有 64 个成员,其值为表创建时规定的一个列值。
指定包括多个 SET 成员的 SET 列值时,各成员之间用逗号(,)隔开。语法格式如下:
与 ENUM 类型相同,SET 值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动被删除。与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的多个列值中选择一个值插入,而 SET 类型的列可从定义的多个列值中选择多个字符的联合。
如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在将这些值存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,并给出警告。
【实例】创建表 tmp11,定义 SET 类型的字段 s,取值列表为 ('a', 'b', 'c', 'd'),插入数据 ('a')、('a,b,a')、('c,a,d')、('a,x,b,y')。
1) 创建表 tmp11:
2) 插入数据:
3) 再次插入数据:
4) 查看插入结果:
指定包括多个 SET 成员的 SET 列值时,各成员之间用逗号(,)隔开。语法格式如下:
SET('值1','值2',...,'值n')
与 ENUM 类型相同,SET 值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动被删除。与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的多个列值中选择一个值插入,而 SET 类型的列可从定义的多个列值中选择多个字符的联合。
如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在将这些值存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,并给出警告。
【实例】创建表 tmp11,定义 SET 类型的字段 s,取值列表为 ('a', 'b', 'c', 'd'),插入数据 ('a')、('a,b,a')、('c,a,d')、('a,x,b,y')。
1) 创建表 tmp11:
CREATE TABLE tmp11 ( s SET('a', 'b', 'c', 'd'));
2) 插入数据:
INSERT INTO tmp11 values('a'),( 'a,b,a'),('c,a,d');
3) 再次插入数据:
mysql>INSERT INTO tmp11 values ('a,x,b,y'); ERROR 1265 (01000): Data truncated for column 's' at row 1由于插入了 SET 列不支持的值,因此 MySQL 给出错误提示。
4) 查看插入结果:
mysql> SELECT * FROM tmp11; +-------+ | s | +-------+ | a | | a,b | | a,c,d | +-------+从结果中可以看到,对于 SET 来说:
- 如果插入的值为重复的,则只取一个,例如插入“a,b,a”,则结果为“a,b”;
- 如果插入了不按顺序排列的值,则自动按顺序插入,例如插入“c,a,d”,结果为“a,c,d”;
- 如果插入了不正确的值,那么该值将被阻止插入,例如插入“a,x,b,y”,则提示错误并阻止插入。