触发器:
和存储过程比较
1 、共同点
针对表的操作(SQL语句集合)
2、 区别点
不需要调用
触发器在当前版本里不太稳定,不建议在有重要的数据的数据库里使用
约束:
目的:保证数据库的安全(独立性、共享性)派出数据冗余;
域完整性约束(列):数据类型、格式、值域范围(enum,set)、是否为空、自动增长等;
实体完整性约束(行):自己整理
用户自定义约束:
例如:年龄 int 0-100
参照完整性约束:外键
练习:使用触发器完成check约束
1、 创建触发器
语法 :
create procedure 名称(参数)
begin
流程控制语句
SQL语句集合
end
create trigger 名称 触发时间(after|before) 触发事件(insert 、update、delete)
on 表名 for each row
begin
SQL语句集合
end
练习:对tb1创建触发器,执行插入insert 语句后,将用户变量str赋值“working”;
练习2:对tb1(字段s1)创建触发器,删除数据后,将t2(字段s2)里对应的记录同步删除;
第一步:创建触发器
create trigger tb1 delete after delete on t1 for each row
begin
局部变量、用户变量等;
流程控制语句;
SQL语句集合;
call 存储过程名()
delete from t1 where s2=OLD.s1;
end
第二步:激活触发器
delete from tb1;
第三步:验证结果
select * from t1;
结果:tb1中的数据都没了,t1中的数据和tb1中的相同数据被删除
删除触发器:
drop trigger 名称
练习3:
t1(s1 int)
t2(s2 int)
记录30,60,90
当t1表里修改数据后小于60,则在t2表将对应记录改为0;
大于60,…………………………….2;
create trigger t1_update after update on t1 for each row
update t2 set s2=0;
update t1 set s1=20;