1.7.3.3 ENUM 和 SET 约束

ENUMSET 列提供了定义只能包含给定值集的列的高效方式。见第13.3.5节,“ENUM 类型”,和第13.3.6节,“SET 类型”

除非禁用严格模式(不推荐,但见第7.1.11节,“服务器 SQL 模式”),ENUMSET 列的定义将作为列值的约束。出现不满足这些条件的值时,发生错误:

  • 一个ENUM 值必须是列定义中列出的其中之一,或者其内部数字等价值。该值不能是错误值(即0或空字符串)。对于定义为'a','b','c' 的列,值如'''d''ax' 都是无效的,并被拒绝。

  • 一个SET值必须是空字符串或由列定义中的值以逗号分隔的值。对于定义为SET('a','b','c')的列,像'd''a,b,c,d'这样的值是无效的,会被拒绝。

如果使用INSERT IGNOREUPDATE IGNORE在严格模式下,可以忽略无效值,生成警告,而不是错误。对于ENUM,值将被插入为错误成员(0)。对于SET,值将被插入,但无效子串将被删除。例如,'a,x,b,y'将结果为'a,b'