触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作。

下面直接上干货,创建insert触发器、delete触发器、DDL触发器和如何查看触发器定义

1.创建三个表学生表、班级表、课程表

  1. create database student_score
  2. GO
  3. --在数据库中创建三个表学生表、班级表、课程表的结构
  4. use student_score
  5. GO
  6. create table student
  7. ( stu_id char(8) primary key,
  8. stu_name char(10),
  9. stu_sex char(2),
  10. stu_birthday smalldatetime,
  11. class_id char(6)
  12. )
  13. go
  14. create table class
  15. ( class_id char(6) primary key,
  16. class_name varchar(30),
  17. class_num int,
  18. )
  19. create table course
  20. ( course_id char(3) primary key,
  21. course_name varchar(30),
  22. )
  23. go
  24. create table score
  25. ( stu_id char(8),
  26. course_id char(3),
  27. score int check(score>=0 and score<=100)
  28. primary key(stu_id,course_id)
  29. )
  30. go

2.插入用例数据

  1. --往表中插入数据(student,course,score)
  2. insert into student values('0601001','李玉','女','1987-05-06', '0601')
  3. insert into student values('0601002','鲁敏','女','1988-06-28', '0601')
  4. insert into student values('0601003','李小路','女','1987-01-08', '0601')
  5. insert into student values('0601004','鲁斌','男','1988-04-21', '0601')
  6. insert into student values('0601005','王宁静','女','1986-05-29', '0601')
  7. insert into student values('0601006','张明明','男','1987-02-24', '0601')
  8. insert into student values('0601007','刘晓玲','女','1988-12-21', '0601')
  9. insert into student values('0601008','周晓','男','1986-04-27', '0601')
  10. insert into student values('0601009','易国梁','男','1985-11-26', '0601')
  11. insert into student values('0601010','季风','男','1986-09-21', '0601')
  12.  
  13. insert into class values('0501','计算机办公应用', 40)
  14. insert into class values('0502','网络构建', 43)
  15. insert into class values('0503','图形图像', 48)
  16. insert into class values('0601','可视化', 41)
  17. insert into class values('0602','数据库', 38)
  18. insert into class values('0603','网络管理', 45)
  19. insert into class values('0604','多媒体', 40)
  20. insert into class values('0701','计算机办公应用', 39)
  21. insert into class values('0702','WEB应用', 38)
  22. insert into class values('0703','网络构建', 40)
  23.  
  24. insert into course values('001','计算机应用基础')
  25. insert into course values('002','关系数据基础')
  26. insert into course values('003','程序设计基础')
  27. insert into course values('004','数据结构')
  28. insert into course values('005','网页设计')
  29. insert into course values('006','网站设计')
  30. insert into course values('007','SQL Server 2000关系数据库')
  31. insert into course values('008','SQL Server 2000程序设计')
  32. insert into course values('009','计算机网络')
  33. insert into course values('010','Windows Server 配置')
  34.  
  35. insert into score values('0601001','001',78)
  36. insert into score values('0601002','001',88)
  37. insert into score values('0601003','001',65)
  38. insert into score values('0601004','001',76)
  39. insert into score values('0601005','001',56)
  40. insert into score values('0601006','001',87)
  41. insert into score values('0601007','001',67)
  42. insert into score values('0601008','001',95)
  43. insert into score values('0601009','001',98)
  44. insert into score values('0601010','001',45)
  45.  
  46. insert into score values('0601001','002',48)
  47. insert into score values('0601002','002',68)
  48. insert into score values('0601003','002',95)
  49. insert into score values('0601004','002',86)
  50. insert into score values('0601005','002',76)
  51. insert into score values('0601006','002',57)
  52. insert into score values('0601007','002',77)
  53. insert into score values('0601008','002',85)
  54. insert into score values('0601009','002',98)
  55. insert into score values('0601010','002',75)
  56.  
  57. insert into score values('0601001','003',88)
  58. insert into score values('0601002','003',78)
  59. insert into score values('0601003','003',65)
  60. insert into score values('0601004','003',56)
  61. insert into score values('0601005','003',96)
  62. insert into score values('0601006','003',87)
  63. insert into score values('0601007','003',77)
  64. insert into score values('0601008','003',65)
  65. insert into score values('0601009','003',98)
  66. insert into score values('0601010','003',75)
  67.  
  68. insert into score values('0601001','004',74)
  69. insert into score values('0601002','004',68)
  70. insert into score values('0601003','004',95)
  71. insert into score values('0601004','004',86)
  72. insert into score values('0601005','004',76)
  73. insert into score values('0601006','004',67)
  74. insert into score values('0601007','004',77)
  75. insert into score values('0601008','004',85)
  76. insert into score values('0601009','004',98)
  77. insert into score values('0601010','004',75)
  78.  
  79. insert into score values('0601001','005',74)
  80. insert into score values('0601002','005',68)
  81. insert into score values('0601005','005',76)
  82. insert into score values('0601008','005',85)
  83. insert into score values('0601009','005',98)
  84. insert into score values('0601010','005',75)
  85.  
  86. insert into score values('0601002','006',88)
  87. insert into score values('0601003','006',95)
  88. insert into score values('0601006','006',77)
  89. insert into score values('0601008','006',85)
  90. insert into score values('0601010','006',55)
  91.  
  92. insert into score values('0601001','007',84)
  93. insert into score values('0601002','007',68)
  94. insert into score values('0601003','007',95)
  95.  
  96. insert into score values('0601004','008',86)
  97. insert into score values('0601005','008',76)
  98. insert into score values('0601006','008',67)
  99.  
  100. insert into score values('0601007','009',67)
  101. insert into score values('0601008','009',85)
  102.  
  103. insert into score values('0601009','010',98)
  104. insert into score values('0601010','010',75)

3.练习实例

  1. --1)在student上创建INSERT触发器stu_insert,要求在student表中插入记录时(要求每次只能插入一条记录),这个触发器都将更新class表中的class_nun列。并测试触发器stu_insert
  2. create trigger stu_insert
  3. on student
  4. for insert
  5. as
  6. update class set class_num=class_num + 1
  7. where class_id=(select class_id from inserted)
  8.  
  9. --测试
  10. insert into student values('0602011','文','女','1986-09-21', '0602')
  11.  
  12. --2)在student上创建DELETE触发器stu_delete,要求在student表中删除记录时,这个触发器都将更新class表中的class_nun列。并测试触发器stu_delete
  13. create trigger stu_delete
  14. on student
  15. for delete
  16. as
  17. update class set class_num=class_num - 1
  18. where class_id = (select class_id from deleted)
  19.  
  20. --测试
  21. delete from student where stu_id='0601001'
  22.  
  23. --3)查看触发器相关信息:使用系统存储过程sp_helpsp_helptext查看触发器相关信息。
  24. exec sp_help
  25. exec sp_help stu_insert
  26. exec sp_helptext stu_insert
  27.  
  28. --4)对于下列触发器:
  29. create trigger stu_update
  30. on student
  31. instead of update
  32. as
  33. print '修改学生表'
  34. drop trigger stu_update
  35. 执行语句
  36. update student
  37. set stu_id='0601003'
  38. where stu_name='鲁斌'
  39. 会怎么样?
  40. --消息 2627,级别 14,状态 1,第 1
  41. --违反了 PRIMARY KEY 约束 'PK__student__E53CAB217F60ED59'。不能在对象 'dbo.student' 中插入重复键。
  42. --语句已终止。
  43.  
  44. --5)创建DDL触发器,在当前数据库中不允许删除或修改表
  45. create trigger data
  46. on database
  47. for drop_table, alter_table
  48. as
  49. print '不允许删除或修改表'
  50. rollback

此例很完整,供有需要进行练习触发器的朋友看看

sqlserver的触发器练习实例的更多相关文章

  1. sqlserver数据库触发器调用外部exe

    sqlserver数据库触发器调用外部exe,同事可以选择参入参数! sqlserver使用 master..xp_cmdshell 进行外部exe的执行. 使用master..xp_cmdshell ...

  2. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  3. SqlServer添加触发器死锁的原因

    之前遇到过SqlServer添加触发器死锁的情况,纠结了很长时间 最近发现原来是因为我在建表的时候,把id设成主键后,系统默认了加一个聚集的索引 就是聚集索引把表锁住了

  4. MySQL 触发器简单实例 - 转载

    MySQL 触发器简单实例 触发器:可以更新,删除,插入触发器,不同种类的触发器可以存在于同一个表,但同种类的不能有多个.一个更新.一个删除是可以共存的. ~~语法~~ CREATE TRIGGER  ...

  5. SQLServer之触发器简介

    触发器定义 触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程.SQLServer允许为任何特定语句创建多个触发器.它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对数据库进行操作 ...

  6. 在SQLServer使用触发器实现数据完整性

    1.实现数据完整性的手段 在sqlserver中,在服务器端实现数据完整性主要有两种手段:一种是在创建表时定义数据完整性,主要分为:实体完整性.域完整性.和级联参照完整性:实现的手段是创建主键约束.唯 ...

  7. 知方可补不足~sqlserver中触发器的使用

    回到目录 触发器在过去的10年中,即存储过程和ado.net称霸江湖期间是那么的重要,而现在,trigger显得不是那么必要的,我们很少将复杂的业务写在SQL里,当然也会没有机会写到trigger里了 ...

  8. MySQL 触发器简单实例

    ~~语法~~ CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE |  ...

  9. Mysql笔记——触发器简单实例

    首先贴上触发器语法吧: CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFOR ...

随机推荐

  1. Tomcat7配置管理员帐号密码及权限

    在使用tomcat时,若要使用管理监控功能,需要用用户名密码登录使用,而tomcat7默认是将用户是注释的,所以需要配置后使用, 配置文件为根目录下的/conf/tomcat-users.xml文件. ...

  2. AppServ安装的一点小麻烦----

    好久,没装AppServ了,今天安装过程顺利,但是Apache,服务开启不了,页面也不能访问. 刚开始以为是版本下载错误了,先后换了N个版本,都不行. 在网上搜的过程中,偶然发现,一句话:64位系统, ...

  3. [0] DDD领域驱动设计(二) 之 值对象

    DDD中实体对象与值对象的解释比较抽象.主要根据持续性与 ID 识别来区分. ID并非某一对象的直观自然属性,而是在分析建模之 后,赋给模型中的实体类,来达到跟踪,区别,存储目的的一个特值. 结合项目 ...

  4. .NET Framework 各个版本介绍

    .NET Framework 1.1 自1.0版本以来的改进:自带了对mobile asp .net控件的支持.这在1.0版本是以附加功能方式实现的,现在已经集成到框架的内部.安全方面的变更 - 使得 ...

  5. epoll的ET和LT模式比较 - 源码分析

    eventpoll是一种文件,它实现了一种机制利用一条rdllist队列来避免阻塞地进行poll.eventpoll归根到底还是在使用poll.而ET比LT高效,并不在于是否使用了poll,更不能说是 ...

  6. 使用 FLASH DATABASE 恢复误删除的用户

    场景描述 误 drop 了生产库中的用户 U1 U1 用户下面有 3 张表(T1-T3),表中数据如下所示: SQL> conn u1/u1 Connected. SQL> select ...

  7. 跨域访问之JSONP

    跨域 在平常的工作中常常会遇到A站点的需要访问B站点的资源. 这时就产生了跨域访问. 跨域是指从一个域名的网页去请求另一个域名的资源.浏览器遵循同源策略,不允许A站点的Javascript 读取B站点 ...

  8. 数组 list互转

    数组 list互转 String str[] = list.toArray(new String[]{}); List list= java.util.Arrays.asList(String str ...

  9. 怎么用jq封装插件

    怎么用jq封装插件 以隔行变色为例 实现原理:1.找到表格的奇偶行,然后添加不同的class,激活行高亮显示也很简单,只要判断mouseover事件,然后添加一个class,mouseout的时候,再 ...

  10. JS面向对象笔记二

    菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...