数据库总结九触发器

SQL Server 2005中,触发器可以分为两大类:DML触发器和DDL触发器

  DML触发器:DML触发器是当数据库服务器中发生数据操作语言(Data Manipulation Language)事件时执行的存储过程。DML触发器又分为两类:After触发器和Instead Of触发器

  DDL触发器:DDL触发器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。DDL触发器一般用于执行数据库中管理任务。如审核和规范数据库操作、防止数据库表结构被修改等。

 DML触发器的分类

SQL Server 2005DML触发器分为两类:

  After触发器:这类触发器是在记录已经改变完之后(after),才会被激活执行,它主要是用于记录变更后的处理或检查,一旦发现错误,也可以用Rollback Transaction语句来回滚本次的操作。

 

 Instead Of触发器:这类触发器一般是用来取代原本的操作,在记录变更之前发生的,它并不去执行原来SQL语句里的操作(InsertUpdateDelete),而去执行触发器本身所定义的操作

 

create table employees(

    employee_id int primary key not null,

    last_name varchar(50) null,

    first_name varchar(50) null,

    hire_date datetime null,

    job_id int null,

    email varchar(500) null,

    department_id int null,

    salary int null,

    commission_pct int null

)

 

create trigger employees_update

 on employees

   after update

 as

 begin

         print '有一个员工更改了'

 end

 

create trigger employees_insert

 on employees

   after insert

 as

 begin

         print '有一个员工增加了'

 end

 

create trigger employees_delete

 on employees

   after delete

 as

 begin

         print '有一个员工删除了'

 end

 

 

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 12345,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

 

delete employees

 

update employees set last_name = 'dabing' where employee_id=12345;

 

select * from employees

select commission_pct from employees where employee_id=12345;

 

 

 

 

drop trigger employees_insert

create trigger employees_insert

  on employees

  after insert

as

begin

  declare @employee_id int

  set @employee_id = (select employee_id from inserted)

  if(@employee_id > 5 )

  begin

  print '员工号大于的不能添加'

  Rollback Transaction

  end

end;

 

alter trigger employees_insert

  on employees

  instead of insert

as

begin

  declare @employee_id int

  set @employee_id = (select employee_id from inserted)

  if(@employee_id > 5 )

  begin

  print '员工号大于的不能添加'

  end

end;

 

 

 

 

drop trigger employees_delete

create trigger employees_delete

  on employees

  instead of delete

as

begin

  declare @employee_id int                  

  set @employee_id = (select employee_id from deleted)

  if(@employee_id > 2 )

  begin

  print '员工号大于的不能删除'

  end

end;

 

delete employees where employee_id = '3'

 

 

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 1,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 2,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 3,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 4,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 5,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )

values( 6,'Chen','Donny', '2010-05-08', 12, 'donny@hotmail.com',60,10000,25);

select * from employees

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值