Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

1.6.3.4 ENUM 和 SET 约束

ENUMSET 列提供了一种高效的方式来定义只能包含特定值的列。请参阅 第 13.3.5 节,“ENUM 类型”第 13.3.6 节,“SET 类型”

除非禁用严格模式(不推荐,但请参阅 第 7.1.11 节,“服务器 SQL 模式”),否则 ENUMSET 列的定义将作为该列的约束,对输入的值进行检查。如果输入的值不满足以下条件,将发生错误:

  • 一个 ENUM 值必须是列定义中列出的值之一,或者是其内部数字等效值。该值不能是错误值(即 0 或空字符串)。例如,对于定义为 ENUM('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'