存储过程与触发器

1 .触发器 事件-条件-动作规则(别称)
只能定义于 基本表上,一旦定义,保存在数据库服务器中。
定义格式如下:
CREATE TRIGGER<触发器名>
{BEFORE|AFTER}<触发事件>ON 表名
REFERECING NEW|OLD ROW AS<变量>
FOR EACH {ROW|STATEMENT}
[WHEN<触发条件>]<触发动作体>

触发器类型:行级触发器、语句级触发器。
附行级触发器、语句级触发器区别: http://blog.csdn.net/rui1187349730/article/details/47215365
如果触发动作体执行失败,引起触发器的事件会终止执行,触发器的目标表或触发器影响的其他对象就不会改变。
例子1.当对表学生成绩表SC(Sno,Cno,Grade)修改,若分数增加10%,则将此次操作记录到SC_U表中(Sno,Cno,Oldgrade,Newgrade)中。

CREATE TRIGGER SC_T
AFTER UPDATE OF Grade ON SC
REFERECING
OLDROW AS OldTuple,
NEWROW AS NewTuple
FOR EACH ROW //行级触发器,每更新一次Grade,下面规则就要执行一次
WHEN(NewTuple.Grade>=1.1*OldTuple.Grade)
INSERT INTO SC_U(Sno,Cno,Oldgrade,Newgrade) VALUES
(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade);

例子2.将每次对表Student 的插入操作所增加的学生个数记录到表Student_InsertLog中
CREATE TRRIGER student_Count
AFTER INSERT ON Student
REFERECING
NEW TABLE AS nt
FOR EACH STATEMENT //语句级触发器,既执行完INSERT 语句后下面的触发提才执行一次
INSERT INTO Student_InsertLog(Numbers)
SELECT COUNT(*) FROM nt;
删除触发器:DROP <触发器名>ON<表名>;、
2.存储过程
存储过程是由过程化sql语句书写的过程,经编译和优化后存储于数据库服务器中,使用时调用既可。
优点如下:
1.运行效率高(不用像过程化sql语句在操作请求时才进行语法分析和优化工作,它提供了在服务器端快速运行sql的途径。)
2.存储过程降低了客户机和服务器间的通信量。
3.方便管理。
创建存储过程
CREATE OR REPLACE PROCEDURE 过程名(参数1,参数2,参数3........) //存储过程首部
AS <过程化SQL块>; //存储过程体,描述存储过程操作
例子利用存储过程实现下面应用:从账户1转指定数额的款项到账户2中,假设账户关系为Account(Accountnum,tatal)
CREATE OR REPLACE PROCEDURE TRANSFER(inAccount INT,outAccount INT,amount FLOAT)
//定义存储过程给你TRANSFER,其参数为转入账户、转出账户、转账额度
//定义变量
AS DECLARE
totalOut Float;
totalIn Float;
inAccountnum INT;
BEGIN
SELECT Total INTO totalOut FORM Account WHERE accountnum = outAccount;
IF totalOut IS NULL THEN //如果转出账户不存在或者账户中没存款
ROLLBACK;//事务回滚
RETURN;
END IF;
IF totalOut<amount THEN
ROLLBACK;
RETURN;
END IF;
SELECT Accountnum INTO totalIn FROM Account WHERE accountnum = inAccount;
IF totalIn IS NULL THEN
ROLLBACK;
RETURN;
END IF;
//修改转出账户的金额
UPDATE Account SET total= total-account WHERE accountnum =outAccount;
//修改转入账户的金额
UPDATE Account SET total=total+account WHERE accountnum = inAccount;
COMMIT;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值