MySQL关于check约束无效的解决办法
首先看下面这段MySQL的操作,新建一个含有a和b的表,其中a用check约束必须大于0,然而插入了一条(-2,1,1)的数据,其中a=-2,也是成功插入的。
所以MySQL只是check,但是不强制check。
mysql> create table checkDemoTable(a int,b int,id int,primary key(id));
Query OK, 0 rows affected
mysql> alter table checkDemoTable add constraint checkDemoConstraint check(a>0);
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into checkDemoTable values(-2,1,1);
Query OK, 1 row affected
mysql> select * from checkDemoTable;
+----+---+----+
| a | b | id |
+----+---+----+
| -2 | 1 | 1 |
+----+---+----+
1 row in set
解决这个问题有两种办法:
mysql> create table checkDemoTable(a enum('男','女'),b int,id int,primary key(id));
Query OK, 0 rows affected
mysql> insert into checkDemoTable values('男',1,1);
Query OK, 1 row affected
mysql> select * from checkDemoTable;
+----+---+----+
| a | b | id |
+----+---+----+
| 男 | 1 | 1 |
+----+---+----+
1 row in set
2.如果需要设置CHECK约束的字段是连续的,或者列举全部值很困难,比如正实数或正整数,那就只能用触发器来代替约束实现数据有效性了。下面这段代码创建了一个叫做TestField1_BeforeInsert的约束器,它将保证新插入的数据中 a 字段的值不小于零。
DELIMITER $$
CREATE TRIGGER TestField1_BeforeInsert BEFORE INSERT ON checkDemoTable
FOR EACH ROW
BEGIN
IF NEW.a < 0 THEN
SET NEW.a = 0;
END IF;
END$$
转载于:https://www.cnblogs.com/nyist-xsk/p/7278501.html
总结
以上是生活随笔为你收集整理的MySQL关于check约束无效的解决办法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 策略模式(Stratety)
- 下一篇: 分享一个数据库工具DTOOLS