1.8.3.4 ENUM 和 SET 约束

ENUMSET列提供了一种有效的方式来定义只能包含一组给定值的列。参见第 11.3.5 节“ ENUM 类型”第 11.3.6 节“ SET 类型”

除非禁用严格模式(不建议使用严格模式,但请参见第 5.1.10 节“服务器 SQL 模式”),否则ENUMSET列的定义将成为对该列中 Importing 的值的约束。不满足以下条件的值会发生错误:

  • 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'