天天看点

Mysql里check约束无效怎么办?

       今天写到项目时,遇到了这个问题:msql里check约束为什么会无效?具体原因,不清楚,但是我找到了一些解决的办法

    解法如下:

        例如下面一段代码,创建好表A后,添加CHECK约束,要求a字段和b字段的值都大于等于0,随后向a字段和b字段随意插入-1,-2,这明显违反CHECK约束,但这段代码在MySQL里面却可以执行成。

 运行结果如下:

Mysql里check约束无效怎么办?

解决这个问题有两种方式。

1.  如果需要设置CHECK约束的字段范围小,并且比较容易列举全部的值,就可以考虑将该字段的类型设置为枚举类型 enum()或集合类型set()。

比如性别字段可以这样设置,插入枚举值以外值的操作将不被允许。

示例:

Mysql里check约束无效怎么办?

2.  如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,比如:>=0的值,那就只能使用触发器来代替约束实现数据的有效性了。

下面这段代码创建了一个叫Testtb1_a_b的约束器,它将保证新插入的数据在a,b字段的值都不小于零。

Mysql里check约束无效怎么办?