手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

数据库触发器的创建

时间:2024-10-12 10:09:42

1、触发器作用:a.触发器通常用于强制业务规则b.触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束c.可执行复杂的SQL语句(if/while/case) 可引用其它表中的列d.触发器定义在特定的表上,与表相关 不能直接调用的存储过程e.是一个事务(可回滚)ps:它是一种特殊的存储过程,也具备事务的功能,它能在多表之间执行特殊的业务规则.触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。

2、--创建触发器语法createtriggertrigger_nameon{table_name|view_name}{After|Insteadof} {insert|update|delete}as相应T-SQL语句

数据库触发器的创建

3、--触发器 我们用银行转账作为例子--创建一张银行表create table bank( cardId char(9) primary key, customerName CHAR(10), --顾客姓名 currentMoney MONEY default(1) check(currentMoney>0) --当前余额)gocreate table transInfo( cardId char(9) references bank(cardId) , transType varchar(10) not null, transMoney MONEY not null)goINSERT INTO bank(cardId,customerName,currentMoney) VALUES('1001 0001','张三',1000)INSERT INTO bank(cardId,customerName,currentMoney) VALUES('1001 0002','李四',1)go

4、create trigger trig_Transon transInfofor insertas declare @money money declare @cardId char(9) select @cardId=cardId,@money=case transType when '支出' then -transMoney else transMoney end from inserted update bank set currentMoney=currentMoney+@money where cardId=@cardId if(@@error>0) begin raiserror('交易失败',5,1) rollback end else begin print('交易成功') --commit endgo

数据库触发器的创建

5、执行触发器 ,在添加数据这个操作的时候insert into transInfo values('1001 0001','支取',200)insert into transInfo values('1001 0002','存入',20000)insert into transInfo values('1001 0002','支取',20001)

数据库触发器的创建

6、create trigger trig_Bankon bankfor updateas declare @newMoney money d髫潋啜缅eclare @oldMoney money declare @money money declare @cardId char(9) select @cardId=cardId,@newMoney=currentMoney from inserted select @oldMoney=currentMoney from deleted set @money= abs(@newMoney-@oldMoney) if(@money>20000) begin raiserror('每笔交易金额不能超过20000元,交易失败',6,1) print('交易金额:'+convert(varchar(20),@money)) rollback end else begin print('交易成功!交易金额:'+convert(varchar(20),@money)) print('帐号:'+convert(varchar(20),@cardId)+'帐户余额:'+convert(varchar(20),@newMoney)) endgo

数据库触发器的创建

7、触发器--删除触发:delete bank where cardId='1001 0003'

数据库触发器的创建

8、触发器触发时:系统自动在内存中创建deleted表或inserted表只读,不允许修改;触发器执行完成后,自动删除

数据库触发器的创建
© 手抄报圈