8.1

触发器:表的操作会触发多个触发器

调用存储过程;调用外部过程;跟踪数据库内数据的变化,判断数据是否符合数据库的要求,是数据库的修改和更新更安全;数据条件的约束,约束数据的完整性;并发性高;

 

 

8.2

事后触发器:应用到表上;替代触发器:应用到表上和视图上;

 

 

8.3创建事后触发器

/*create trigger testTriggerA创建触发器,名字为:testTriggerA

on AddressInfos这个触发器为AddressInfos创建

for Insert as针对这个触发器做Insert操作时,会调用触发器

 

执行插入操作会执行触发器代码块里面的操作

begin

print 'testTriggerA被调用'

end

*/

create trigger testTriggerAon AddressInfosforInsertas

begin

print 'testTriggerA被调用'

end

 

 

/*插入操作,会调用触发器,执行

begin

print 'testTriggerA被调用'

end

*/

insert into AddressInfos(AI_Id)values('0816e948-95da-4a30-a169-ca577c7d85ec')

输出:testTriggerA被调用

 

注意:插入几条记录,触发器就调用几次

 

 

8.05

在一个表中创建多个触发器,被调用

create trigger testTriggerBon AddressInfosforinsertas

begin

print '第二个触发器被调用'

end

 

create trigger testTriggerCon AddressInfosforinsertas

begin

print '第三个触发器被调用'

end

执行触发器,会调用创建出的多个触发器:

数据库笔记 7

 

 

8.6

/*创建更新触发器*/

create trigger testTriggerDon 网站职员表forinsert as

begin

print '更新触发器被调用!'

end

 

/*调用更新触发器*/

update 网站职员表set 工资=3800where 姓名='小伟'

数据库笔记 7

 

 

8.07

/*创建删除触发器*/

create triggertestDeleteTriggerAon 网站职员表fordeleteas

begin

print 'testDeleteTriggerA触发器被调用'

end

 

/*调用删除触发器*/

delete from 网站职员表where 姓名='小吴'

数据库笔记 7 


 

8.08触发器的调用顺序

/*先创建6个触发器。然后做插入操作,执行触发器*/

insert into 网站职员表(职员编号,姓名,年龄,工资,毕业院校)values(101,'小许',27,600,'哈工大')

 数据库笔记 7

 

8.09执行顺序

sp_settriggerorder:触发器的执行顺序;

sp_settriggerorder:只能指定第一个和最后一个触发器的顺序,不能指定中间;

 

/*参数1:触发器的名称是,testTriggerF;

参数2:触发器的显示位置;

参数3:执行的操作;

触发器的名称是:testTriggerF,执行insert操作时,testTriggerF是第一个被调用的触发器*/

sp_settriggerorder @triggername='testTriggerF',@order='first',@stmttype='insert'

 

/*sp_settriggerorder:触发器的执行顺序;

触发器的名称是:testTriggerA,执行insert操作时,testTriggerA是第一个被调用的触发器*/

sp_settriggerorder @triggername='testTriggerA',@order='last',@stmttype='insert'

 

执行

数据库笔记 7

 

 

8.10

@order='none':取消执行顺序

/*执行insert操作时,取消testTriggerF第一次显示的资格*/

sp_settriggerorder @triggername='testTriggerF',@order='none',@stmttype='insert'

 

/*执行insert操作时,取消testTriggerF最后一次显示的资格*/

sp_settriggerorder @triggername='testTriggerA',@order='none',@stmttype='insert'

 

执行

数据库笔记 7

 

 

8.12

事件后触发器:事件必须先完成

替代触发器:执行触发器中的代码

 

/*创建替代触发器:用当前的触发器代码替代对表的删除操作*/

create TriggertestInsteadTriggerAon 网站职员表insteadofdeleteas

begin

print '替代触发器调用'

end

 

 

当前表

数据库笔记 7

 

/*删除网站职员表中的职员编号未1000的记录,执行的触发器的代码*/

delete from 网站职员表where 职员编号=1000

数据库笔记 7

 

再次查询当前表,内容依然没有改变

数据库笔记 7



8.14有插入功能的触发器

/*网站职员表中创建一个触发器,执行的内容是插入网站经营项目表的一条记录*/

create trigger triggerTestInsertA on新网站职员表 for insert as

begin

insert into 网站经营项目表(项目编号,项目名称,负责人,合伙单位) values (1,'发明java','akui','bat')

end

 数据库笔记 7


查询被调用的表:

数据库笔记 7

 

 

8.18更新时,使用触发器改变其他表某一列的内容

修改触发器:

/*更新网站职员表时,将“网站经营项目表”中的项目名称都改成“软件开发”*/

create trigger [dbo].[testTriggerC] on[dbo].[网站职员表] forupdate as

begin

update 网站经营项目表set 项目名称='软件开发'

end

 

/*查询 网站经营项目表*/

数据库笔记 7

 

/*更新 网站职员表*/

数据库笔记 7

 

/*查询 网站职员表*/

数据库笔记 7

 

/*查询 网站经营项目表*/

数据库笔记 7

 

 

8.19删除表中记录时调用触发器

/*创建删除触发器*/

create triggertestTriggerDeleteA on 网站职员表 for Deleteas

begin

delete from 网站经营项目表

end

 

/*修改网站职员表*/

数据库笔记 7

 

/*查询网站经营项目表,全部被删除*/

数据库笔记 7

 

 

8.21通过sql语句修改和删除触发器

/*在网站职员表插入时,触发触发器*/

alter triggertriggerTestInsertA on 网站职员表 for Insertas

begin

print 'triggerTestInsertA 触发器修改后被调用!'

end

 

/*在网站职员表插入一条记录*/

insert into 网站职员表(职员表号,年龄,工资,毕业院校) values (1,22,3000,'哈工大')

数据库笔记 7

 

/*查询网站职员表*/

数据库笔记 7

 

/*删除触发器*/

drop triggertriggerTestInsertA

 

 

8.22存储过程:查看触发器的信息;查看触发器的代码;

/*执行查看testTriggerDeleteA的信息*/

exec sp_helptestTriggerA

数据库笔记 7

 

/*执行查看testTriggerDeleteA中的代码*/

exec sp_helptexttestTriggerA

数据库笔记 7

 



相关文章:

  • 2021-07-17
  • 2021-10-28
  • 2021-06-12
  • 2021-11-21
猜你喜欢
  • 2021-07-27
  • 2021-06-22
  • 2022-12-23
  • 2021-11-18
相关资源
相似解决方案