insert插入触发器

来源:互联网 发布:excel断开数据连接 编辑:程序博客网 时间:2024/06/04 18:01

--测试数据库

use master

go

drop database Bank

go

create database Bank

go

 

use Bank

go

 

create table Cards

(

    cardNum varchar(19) primary key ,

    userName varchar(50) not null,

    balance money default(0) check(balance>=0) not null

)

go

create table TransInfo

(

    cardNum varchar(19) references Cards(cardNum) not null,

    transType varchar(4) check(transType in ('存款','取款')) not null,

    transMoney money not null check(transMoney>=0),

    transDate datetime default(getdate()) not null

)

go

 

insert into Cards values('1234 5678 1234 5678','张三',1500)

insert into Cards values('1234 5678 4321 6666','李四',1500)

 

 

--首先介绍插入触发器insert

 

create trigger transInfo_Insert

on TransInfo for insert

as

declare @cardNum varchar(19),

@transType varchar(4),

@transMoney money

 

select @cardNum=cardNum,@transType=transType,@transMoney=transMoney from inserted--插入临时表,保存当前插入该表的数据

 

if(@transType='存款')

    begin

       update Cards set balance=balance+@transMoney where cardNum=@cardNum

    end

else

    begin

       update Cards set balance=balance-@transMoney where cardNum=@cardNum

    end

go

 

--当我们向TransInfo插入数据时,数据库服务器将会自动调用transInfo_Insert触发器并执行。

--触发器的特点:、无法手动调用。、本身就是一个特殊的存储过程并且自身具备一个事务。、如果想插入数据失败,可以使用rollback进行回滚。

--4、该触发器的事务是从启动时开启,结束时自动提交。

 

 

 

insert into TransInfo values('1234 5678 4321 6666','取款',300,default)

insert into TransInfo values('1234 5678 4321 6666','存款',200,default)

 

--运行完查看结果

 

select * from transinfo

select * from cards

 

 

---------------------------------------------------------------------------------------------

--测试数据库

use master

go

drop database Bank

go

create database Bank

go

 

use Bank

go

 

create table Cards

(

    cardNum varchar(19) primary key ,

    userName varchar(50) not null,

    balance money default(0) check(balance>=0) not null

)

go

create table TransInfo

(

    cardNum varchar(19) references Cards(cardNum) not null,

    transType varchar(4) check(transType in ('存款','取款')) not null,

    transMoney money not null check(transMoney>=0),

    transDate datetime default(getdate()) not null

)

go

 

insert into Cards values('1234 5678 1234 5678','张三',1500)

insert into Cards values('1234 5678 4321 6666','李四',1000)

 

insert into TransInfo values('1234 5678 4321 6666','取款',300,default)

insert into TransInfo values('1234 5678 4321 6666','存款',200,default)

go

 

--创建删除触发器

create trigger TransInfo_Delete--触发器名称

on TransInfo for delete--on 表名for 触发器类型

as

declare @cardNum varchar(19),

@transType varchar(4),

@transMoney money

if exists(select id from sysobjects where [name]='bak_transinfo')

    insert into bak_transinfo select * from deleted

else

    select * into bak_transinfo from deleted

 

go

--在删除触发器中存在的是deleted临时表,当中保存了删除该表的所有数据,直到触发器执行完毕时删除。

 

--测试操作

delete from transinfo where cardNum='1234 5678 4321 6666'

 

--运行完查看结果

 

select * from transinfo

select * from cards

 

---------------------------------------------------------------------------------------------

--创建update更新触发器

create trigger TransInfo_Update

on TransInfo for update

as

--在更新触发器中存在两张临时表inserteddeleted

--因为在更新操作中,原理也就是将原来的该行数据删除,然后在插入新的行数据

 

if update(transmoney) --使用update(列名)可以判断指定列是否有进行数据的更新

    print '金额更新了!'

else

    print '金额没有更新!'

 

--通过以上的操作可以验证转账金额

go

原创粉丝点击