如何对外键,mysql的引用表进行检查约束?

时间:2011-09-12 06:57:52

标签: mysql check-constraints

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

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

1 个答案:

答案 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之前进一步欺骗)。