`
txf2004
  • 浏览: 6883734 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

触发器操作

 
阅读更多

触发器:

和存储过程比较

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语句集合;

Call 存储过程名();

End

实例操作1:对t1创建触发器,执行插入语句后,将用户变量str赋值“working”;

实例操作2:对t1(字段s1)创建触发器,删除数据后,将t2(字段s2)里对应的记录同步删除;

第一步:创建触发器

create trigger t1_delete after delete on t1 for each row

delete from t2 where s2=OLD.s1;

第二步:激活触发器

delete from t1;

第三步:验证结果

Select * from t2;

实例操作3:创建表t3(s3 char(8)),该字段对记录的要求为,必须以’A’为开头

例如:insert into t3 values(‘Ax’);

使用触发器来实现该约束

Insert来验证

删除触发器:

Show triggers;

Drop trigger trigger_name;

实例操作4:

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;

注意:同一张表进行更新可不可以使用after?为什么?

事务、用户(创建、权限分配)、数据的导入导出、安全等

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics