Table: User
uid = Integer
superuser = Boolean
Table: Group
gid = Integer
grpname = String
Table: User_Group_Rel
uid: ForeigneKey(User)
gid: ForeignKey(Group)
CONSTRAINT check1 CHECK (uid.superuser != False),
当我将数据插入关系表时,它不会引发约束异常
答案 0 :(得分:2)
不幸的是,MySQL没有强制执行检查约束。它解析检查约束声明,但默默地忽略它们。它甚至没有产生警告它正在这样做。
请参阅http://dev.mysql.com/doc/refman/5.1/en/create-table.html:
CHECK子句被解析但被所有存储引擎忽略。
人们使用各种变通方法来约束列,例如:
将列声明为只包含您想要允许的值的ENUM。
定义一个FOREIGN KEY,使列引用一个只包含您想要允许的值的查找表。
在BEFORE INSERT和BEFORE UPDATE之前写一个TRIGGER来更改值或引发异常(这需要在MySQL 5.5之前进一步欺骗)。