0
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),  

当我将数据插入关系表时,它不会引发约束异常

4

1 回答 1

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 之前需要进一步的诡计)。

于 2011-09-12T07:00:20.647 回答