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
执行触发器,会调用创建出的多个触发器:
8.6
/*创建更新触发器*/
create trigger testTriggerDon 网站职员表forinsert as
begin
print '更新触发器被调用!'
end
/*调用更新触发器*/
update 网站职员表set 工资=3800where 姓名='小伟'
8.07
/*创建删除触发器*/
create triggertestDeleteTriggerAon 网站职员表fordeleteas
begin
print 'testDeleteTriggerA触发器被调用'
end
/*调用删除触发器*/
delete from 网站职员表where 姓名='小吴'
8.08触发器的调用顺序
/*先创建6个触发器。然后做插入操作,执行触发器*/
insert into 网站职员表(职员编号,姓名,年龄,工资,毕业院校)values(101,'小许',27,600,'哈工大')
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'
执行
8.10
@order='none':取消执行顺序
/*执行insert操作时,取消testTriggerF第一次显示的资格*/
sp_settriggerorder @triggername='testTriggerF',@order='none',@stmttype='insert'
/*执行insert操作时,取消testTriggerF最后一次显示的资格*/
sp_settriggerorder @triggername='testTriggerA',@order='none',@stmttype='insert'
执行
8.12
事件后触发器:事件必须先完成
替代触发器:执行触发器中的代码
/*创建替代触发器:用当前的触发器代码替代对表的删除操作*/
create TriggertestInsteadTriggerAon 网站职员表insteadofdeleteas
begin
print '替代触发器调用'
end
当前表
/*删除网站职员表中的职员编号未1000的记录,执行的触发器的代码*/
delete from 网站职员表where 职员编号=1000
再次查询当前表,内容依然没有改变
8.14有插入功能的触发器
/*在“网站职员表”中创建一个触发器,执行的内容是插入“网站经营项目表”的一条记录*/
create trigger triggerTestInsertA on新网站职员表 for insert as
begin
insert into 网站经营项目表(项目编号,项目名称,负责人,合伙单位) values (1,'发明java','akui','bat')
end
查询被调用的表:
8.18更新时,使用触发器改变其他表某一列的内容
修改触发器:
/*更新网站职员表时,将“网站经营项目表”中的项目名称都改成“软件开发”*/
create trigger [dbo].[testTriggerC] on[dbo].[网站职员表] forupdate as
begin
update 网站经营项目表set 项目名称='软件开发'
end
/*查询 网站经营项目表*/
/*更新 网站职员表*/
/*查询 网站职员表*/
/*查询 网站经营项目表*/
8.19删除表中记录时调用触发器
/*创建删除触发器*/
create triggertestTriggerDeleteA on 网站职员表 for Deleteas
begin
delete from 网站经营项目表
end
/*修改网站职员表*/
/*查询网站经营项目表,全部被删除*/
8.21通过sql语句修改和删除触发器
/*在网站职员表插入时,触发触发器*/
alter triggertriggerTestInsertA on 网站职员表 for Insertas
begin
print 'triggerTestInsertA 触发器修改后被调用!'
end
/*在网站职员表插入一条记录*/
insert into 网站职员表(职员表号,年龄,工资,毕业院校) values (1,22,3000,'哈工大')
/*查询网站职员表*/
/*删除触发器*/
drop triggertriggerTestInsertA
8.22存储过程:查看触发器的信息;查看触发器的代码;
/*执行查看testTriggerDeleteA的信息*/
exec sp_helptestTriggerA
/*执行查看testTriggerDeleteA中的代码*/
exec sp_helptexttestTriggerA