我是靠谱客的博主 激动柜子,最近开发中收集的这篇文章主要介绍Mysql利用触发器TRIGGER的检查约束,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有一个student表如下所示:

create  table student
(
	ID varchar(10) primary key,
	NAME varchar(20),
	GENDER varchar(2),
	check(GENDER in ('F', 'M')),
);

SID代表学生的学号,NAME表示学生的名字,GENDER是指学生性别

check(GENDER in ('F', 'M'))

这一行是在约束GENDER,GENDER只能在F和M中取值
本来在进行约束之后插入的数据中GENDER的值不是F或M就会报错
但在mysql运行insert into student values('S2','Liu fang', 'A');的时候发现没有报错,而且student表格确实也增加了S2这一列,问题出在哪儿呢?

虽然写check不会报错,但mysql是不支持这样的检查约束

问题就来了,又想添加检查约束,但sql的check约束又不能用,每次insert的时候都希望能够check一次插入的值是否满足约束条件要怎么做呢?

很容易想到使用触发器,因为触发器就是每一次满足insert/delete/update的其中某个条件的时候执行begin函数段里面的语句
我们需要在每次insert的时候对插入的值进行检查
create trigger TRIGGER_NAME after insert/delete/update on TABLE_NAME
所以我们选取上面的insert语句

代码段如下所示:

drop TRIGGER if EXISTS insert_student;
create trigger insert_student after insert on student
for each row
begin
	if 
		new.GENDER != 'F' && new.GENDER != 'M'
	then
		signal sqlstate 'ERROR' set message_text = 'gender取值只能是F和M';
	end if;
end

在满足if条件的时候出现signal报错
一定记住最后的end if;
如果这个表格的检查约束不止这一条需要用到if…then…elseif…then…end if;语句

这时候再执行insert into student values('S2','Liu fang', 'A');这一个语句的时候,出现报错

1644 - gender取值只能是F和M, Time: 0.001000s

最后

以上就是激动柜子为你收集整理的Mysql利用触发器TRIGGER的检查约束的全部内容,希望文章能够帮你解决Mysql利用触发器TRIGGER的检查约束所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部