触发器(同游标一样比较难理解,特殊的存储过程)触发器是一种存储过程,只不过是一种特殊类型的存储过程,它的特殊性就在于根据某种特殊的情况下触发的,存储过程的执行需要手动调用,而触发器作为一个存储过程它的执行,不是我们调用的,而是我们进行某些操作之后来触发它的,它的原理相似于其它语言的事件句柄,可以调用存储过程它的主要作用就是用于实现由主键或外部键所不能保证的,复杂的参照完整性或数据一致性。触发器还有以下几个功能:1.可响应数据库的更新,触发器的操作可以通过调用一个或多个存储过程甚至可以通过调用外部过程来完成相应操作。2.还可以跟踪数据库内数据的变化,并判断变化是否符合数据库的要求,例如(对数据库的更新,对表的更新)触发器可以侦测数据库内的操作从而禁止数据库内未经许可的更新和变化,使数据库的修改和更新操作更加的安全,数据库运行更加稳定。3.可以强化数据条件的约束,触发器可以实现比Cheak语句更为复杂的条件约束,(因为它是一个存储过程)更适合大型数据库管理系统中用来约束数据的完整性4.级联和并行运行,触发器可以侦测数据库内的操作,并自动的级联影响整个数据库的各项内容。触发器的类型:事后触发器,替代触发器,      事后触发器是在事件发生之后(insert、update、delete)才执行的,才会调用这些触发器,而这些触发器的先后执行顺序可用由系统存储过程来指定,而且只能指定一个和最后一个调用的触发器而中间无论多少个触发器只是以随机顺序来执行的,事后触发器可以在同一个表的某一个操作指定多个触发器。也就是说插入一条记录可以同时调用多个触发器1.事后触发器:即After触发器,!!!它只能应用在表上,!!!但可以针对表的同一操作定义多个触发器,(譬如说对表插入这个操作,可以定义多个触发器),执行完一个存储过程,再执行另外一个, 再执行下一个,在表上只能为每一个insert、update、delete、指定一个第一个执行的触发器和最后一个执行的触发器,假如创建了六个触发器,指定了第一个和第六个,那么中间的这个四个触发器将以随机的顺序执行,无法手动指定。若创建了3个触发器,指定第一个和第六个,中间的只剩下一个,只能按照顺序执行。2.替代触发器:即 Instead Of触发器,此触发器与事后触发器最大的不同是该触发器并不是预先执行某一操作(insert、update、delete、)它会先执行这些代码,一旦发生它仅仅是会执行触发器这些代码,并不会先执行这些操作。触发器执行了,但表中的记录没有做任何更改。两种类型触发的区别事后触发器只能应用到表上,并且一个表的某一操作同时触发多个触发器,可以利用存储过程来指定哪一个触发器先执行,哪一个后执行。而替代触发器不仅可以应用到表上,还可以应用到视图上,而主要的应用范围就是视图而且替代触发器不会先执行(insert、update、delete)这些操作,它仅仅会执行触发器本身的代码。创建事后触发器(事后触发器先执行对表的操作:删除、更新、插入记录然后才会调用触发器)create trigger testTriggerA on 网站职员表 for insert as \\创建触发器及触发器名字,并声明该触发器是为网站职员表创建的。for insert as,对该表进行insert操作时会调用该触发器               beginprint'testTriggerA被调用'end查找触发器sp_helptext testTriggerA调用触发器:!!!调用触发器实际上是不需要手动来做的,只需要在表中插入记录的时候,就会调用这个触发器。\\利用insert into语句对网站职员表插入值,来引起触发器中的语句来触发触发器。
insert into 网站职员表 (职员编号,毕业院校,姓名,家庭住址,年龄,奖金,总收入,工资) values(800,'沈阳大学','吴','辽宁',28,500,6500,6000)在数据库中键入该条语句的时候会弹出一个错误提示:!!!当 IDENTITY_INSERT 设置为 OFF 时不能为表 '网站职员表'中的标识列插入显式值。!!!以上错误提示为:不能向该网站职员插入该值,以下为解决方法:set IDENTITY_INSERT 网站职员表 on  \\首先利用IDENTITY_INSERT语句对网站职员表开启insert into 网站职员表 (职员编号,毕业院校,姓名,家庭住址,年龄,奖金,总收入,工资) values(800,'沈阳大学','吴','辽宁',28,500,6500,6000)set IDENTITY_INSERT 网站职员表 off  \\再利用IDENTITY_INSERT语句对网站职员表进行关闭!!!!!每执行一次,触发器都会被调用一次再创建两个触发器,都是在表中插入记录时调用这个触发器,使之每次插入记录时可以调用三个触发器!create trigger testTriggerB on 网站职员表 for insert as \\创建触发器及触发器名字,并声明该触发器是为网站职员表创建的。for insert as,对该表进行insert操作时会调用该触发器               beginprint'testTriggerA被调用'endcreate trigger testTriggerC on 网站职员表 for insert as \\创建触发器及触发器名字,并声明该触发器是为网站职员表创建的。for insert as,对该表进行insert操作时会调用该触发器               beginprint'testTriggerA被调用'end上节课学习的是在一个表中的某一个操作(insert、update、delete),可以同时调用多个触发器还可以在(调用、insert、update、delete)时调用触发器更新的时候被调用create trigger testUpdateTriggerA on 网站职员表 for update as  \\创建触发器名字,并声明该触发器是为网站职员表创建的。                                                                 begin                                                            对网站职员表进行update时候会调用该触发器。print'更新触发器被调用'end删除的时候被调用create trigger testDeleteTriggerA on 网站职员表 for delete as \\删除时触发器被调用                                              begin                                                           print'testDeleteTriggerA触发器被调用'end学习如何利用sp_settriggerorder这个系统存储过程来改变同时触发多个触发器时,触发器的先后调用顺序(指定第一个和最后一个调用的触发器)再创建3个触发器testTriggerA被调用    \\插入一条记录同时调用6个触发器第二个触发器第三个触发器被调用testTriggerD触发器被调用。testTriggerE触发器被调用。testTriggerF触发器被调用。指定触发器的调用先后顺序(只能指定第一个和最后一个)sp_settriggerorder @triggername='testTriggerA',@order='first', @stmttype='insert'\\利用sp_settriggerorder对触发器的顺序进行修改。\\触发器的名字testTriggerA  \\触发器的顺序last \\触发器的类型insertsp_settriggerorder @triggername='testTriggerF',@order='last', @stmttype='insert'\\利用sp_settriggerorder对触发器的顺序进行修改。\\触发器的名字testTriggerF  \\触发器的顺序last \\触发器的类型insertsp_settriggerorder是用于定义触发器执行先后顺序的一个系统存储过程sp_settriggerorder @triggername='testTriggerF',@order='none', @stmttype='insert'\\取消触发器先后执行顺序的特性,只需将Oder改为none!!!!创建替代触发器(用触发器中的代码来代替对表的某些操作)创建  触发器  自定义触发器的名字                 替代       删除create Trigger testInsteadTriggerA on 网站职员表 instead of delete as \\对网站职员表进行删除操作时,并不真正执行删除操作begin                                                                   而是执行触发器中的代码中(print'替代触发器调用')print'替代触发器调用'end创建一个触发器,当向网站职员表中插入一条记录的时候,那么向网站经营项目表中就会同样插入一条记录并且可以用指定的插入的员工他的姓名来指定负责一个项目带有插入功能或者其它的特殊功能的触发器,最好用替代触发器create trigger triggerTestInsertA on 网站职员表 for insert as   \\每次向网站职员表中插入一条记录时都会调用这个触发器begininsert into 网站经营项目B (项目编号,项目名称,负责人,合作单位) values (1,'视频教程','小伟','独立开发') \\此触发器的作用就是end                                                                                                     向网站经营项目B插入这样一条记录update 网站职员表 set 姓名='小赵' where 姓名='小伟'   \\把网站职员表中的小伟改成小赵 \\将姓名等于小伟的这个字段更新利用T-SQL语句修改数据库\\update
alter trigger triggerTestInsertA on 网站职员表 for insert as \\修改该触发器,把更新时触发
begin                                                          改成插入时触发
print'triggerTestInsertA触发器被调用'
end利用T-SQL语句删除数据库           drop  trigger triggerTestInsertA 利用两个存储过程:1.一个用于查看触发器的基本信息2.另一个查看触发器创建时所用的的代码查看触发器的基本信息exec sp_help triggerTestInsertA 查看触发器创建时所用的的代码exec sp_helptext triggerTestInsertA

转载于:https://www.cnblogs.com/LNCC-ZhangXiang/p/11077450.html

SQL Server基础操作(此随笔仅作为本人学习进度记录十 !--触发器)相关推荐

  1. SQL Server基础操作(此随笔仅作为本人学习进度记录四 !--索引和视图)

    约束.索引.视图.约束:(要求字段不能为空,必须填写内容,就是非空约束)not null(非空约束).unique(唯一性约束).primary key(主键约束).foreign(外键约束).che ...

  2. SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)

    declare @test_Var int \\声明变量用declare,声明局部变量用@符号,变量的数据类型为整型int. (声明) set @test_Var=1000 \\为此变量赋值,赋值为1 ...

  3. SQL Server基础操作(此随笔仅作为本人学习进度记录五 !--数据类型)

    二进制数据类型binary varbinary Uniqueidentifierbinarry(n):n用来表示数据的长度,长度为 1-8000,最低长度为1.varbinary:varbinary( ...

  4. SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)

    游标就是存储结果集,将从指定表中查询出符合条件的记录,组成了结果集,然后把它存到游标当中,如果要显示游标中的哪一条记录游标(游动的标识) !!!!非常重要的知识点,比较难理解!!!游标提供了对表中的数 ...

  5. SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--函数)

    函数系统函数(算术函数,聚合函数,数据类型转换函数,字符串函数,日期函数,系统统计函数,文本图像函数)算术函数:是对数据类型为整型.浮点型.实型,货币型这些列进行操作算术函数包括(三角函数,反三角函数 ...

  6. SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)

    存储过程存储过程分为系统存储过程和自定义存储过程存储过程通过将处理数据的程序从客户端应用程序移动到服务器,存储过程是放在服务器上的,通过客户端下达指令调用存储过程的时候,这个过程是在服务器上发生的,自 ...

  7. SQL Server基础操作(此随笔仅作为本人学习进度记录二)

    批量化更改字段中的数值(对教师进行涨工资)use LtsDatabase试验 update 教师表 set 教师编号=120,教师薪资=教师薪资+1000,教师姓名='于老师',教师职称='高级教师' ...

  8. SQL Server基础操作(此随笔仅作为本人学习进度记录三)

    统计函数 select * from 教师资料 where 教师薪资>(select AVG(教师薪资) from 教师资料) \\从教师资料表中查出所有高于平均薪资的人员.use LtsDat ...

  9. SQL Server 基础操作(一)安装数据库

    Windows server 2012 R2系统 安装SQL Server 2008数据库 1.创建虚拟机---安装Windwos server 2012 R2 操作系统 2.安装windows se ...

最新文章

  1. 万字长文!DeepMind科学家总结2021年的15个高能研究
  2. 2016第18本:世界上最简单的会计书
  3. solaris 常用软件安装
  4. ntop网络监控-安装配置指南
  5. Python模块——subprocess
  6. day22-面向对象之封装
  7. 关于算法--分治法--合并排序
  8. Mybatis判断表是否存在
  9. CCF CSP201903-1 小中大
  10. (纯代码)图片移动放大缩小:
  11. 易驾佳智能机器人教练_我市首个“机器人教练”上岗 驾校开启人工智能教学新模式...
  12. LIO-SAM探秘第三章之代码解析(三) --- mapOptmization.cpp (1)
  13. 网站被黑被劫持跳转的症状与木马代码清除
  14. NetApp 数据存储阵列 EF 系列——用于大数据分析和高性能计算
  15. java登录界面的实现(任何小白都可轻松实现)
  16. ASEMI场效应管12N65参数,12N65规格书,12N65特征
  17. python爬取12306_python爬取12306列车信息
  18. abb式c语言,ABB机器人是用什么语言编程的? ——ABB机器人
  19. CAN接口电路的 EMC设计方案(工业)
  20. Android开发日志打卡APP(一)

热门文章

  1. 在k8s上部署cerebro访问集群外部署的es
  2. office图标不能正常显示
  3. python编程的缩进什么意思_编程缩进是什么意思
  4. DDS信号发生器原理与vivado仿真
  5. 2015年中国最具竞争力机器人控制器企业10强
  6. 【三维激光扫描技术】原理、方法及实验图文教程目录
  7. java基本微信小程序的快递代收派送系统 uniapp小程序
  8. 数据防泄露产品分析选型指南
  9. 520、Java Spring Cloud Alibaba -【Spring Cloud Alibaba Zuul】 2021.11.02
  10. java内存分析详解_深入java内存查看与分析详解