概述
有一个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的检查约束所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复