跳到主要内容

1.6.3.4 ENUM 和 SET 约束

ENUMSET 列提供了一种有效的方法来定义只能包含给定值集的列。参阅章节11.3.5,“ENUM 类型”章节11.3.6,“SET 类型”

除非禁用严格模式(不推荐,但可参阅章节 5.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'。

原文链接