sqlserver的触发器练习实例
触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作。
下面直接上干货,创建insert触发器、delete触发器、DDL触发器和如何查看触发器定义
1.创建三个表学生表、班级表、课程表
- create database student_score
- GO
- --在数据库中创建三个表学生表、班级表、课程表的结构
- use student_score
- GO
- create table student
- ( stu_id char(8) primary key,
- stu_name char(10),
- stu_sex char(2),
- stu_birthday smalldatetime,
- class_id char(6)
- )
- go
- create table class
- ( class_id char(6) primary key,
- class_name varchar(30),
- class_num int,
- )
- create table course
- ( course_id char(3) primary key,
- course_name varchar(30),
- )
- go
- create table score
- ( stu_id char(8),
- course_id char(3),
- score int check(score>=0 and score<=100)
- primary key(stu_id,course_id)
- )
- go
2.插入用例数据
- --往表中插入数据(student,course,score)
- insert into student values('0601001','李玉','女','1987-05-06', '0601')
- insert into student values('0601002','鲁敏','女','1988-06-28', '0601')
- insert into student values('0601003','李小路','女','1987-01-08', '0601')
- insert into student values('0601004','鲁斌','男','1988-04-21', '0601')
- insert into student values('0601005','王宁静','女','1986-05-29', '0601')
- insert into student values('0601006','张明明','男','1987-02-24', '0601')
- insert into student values('0601007','刘晓玲','女','1988-12-21', '0601')
- insert into student values('0601008','周晓','男','1986-04-27', '0601')
- insert into student values('0601009','易国梁','男','1985-11-26', '0601')
- insert into student values('0601010','季风','男','1986-09-21', '0601')
- insert into class values('0501','计算机办公应用', 40)
- insert into class values('0502','网络构建', 43)
- insert into class values('0503','图形图像', 48)
- insert into class values('0601','可视化', 41)
- insert into class values('0602','数据库', 38)
- insert into class values('0603','网络管理', 45)
- insert into class values('0604','多媒体', 40)
- insert into class values('0701','计算机办公应用', 39)
- insert into class values('0702','WEB应用', 38)
- insert into class values('0703','网络构建', 40)
- insert into course values('001','计算机应用基础')
- insert into course values('002','关系数据基础')
- insert into course values('003','程序设计基础')
- insert into course values('004','数据结构')
- insert into course values('005','网页设计')
- insert into course values('006','网站设计')
- insert into course values('007','SQL Server 2000关系数据库')
- insert into course values('008','SQL Server 2000程序设计')
- insert into course values('009','计算机网络')
- insert into course values('010','Windows Server 配置')
- insert into score values('0601001','001',78)
- insert into score values('0601002','001',88)
- insert into score values('0601003','001',65)
- insert into score values('0601004','001',76)
- insert into score values('0601005','001',56)
- insert into score values('0601006','001',87)
- insert into score values('0601007','001',67)
- insert into score values('0601008','001',95)
- insert into score values('0601009','001',98)
- insert into score values('0601010','001',45)
- insert into score values('0601001','002',48)
- insert into score values('0601002','002',68)
- insert into score values('0601003','002',95)
- insert into score values('0601004','002',86)
- insert into score values('0601005','002',76)
- insert into score values('0601006','002',57)
- insert into score values('0601007','002',77)
- insert into score values('0601008','002',85)
- insert into score values('0601009','002',98)
- insert into score values('0601010','002',75)
- insert into score values('0601001','003',88)
- insert into score values('0601002','003',78)
- insert into score values('0601003','003',65)
- insert into score values('0601004','003',56)
- insert into score values('0601005','003',96)
- insert into score values('0601006','003',87)
- insert into score values('0601007','003',77)
- insert into score values('0601008','003',65)
- insert into score values('0601009','003',98)
- insert into score values('0601010','003',75)
- insert into score values('0601001','004',74)
- insert into score values('0601002','004',68)
- insert into score values('0601003','004',95)
- insert into score values('0601004','004',86)
- insert into score values('0601005','004',76)
- insert into score values('0601006','004',67)
- insert into score values('0601007','004',77)
- insert into score values('0601008','004',85)
- insert into score values('0601009','004',98)
- insert into score values('0601010','004',75)
- insert into score values('0601001','005',74)
- insert into score values('0601002','005',68)
- insert into score values('0601005','005',76)
- insert into score values('0601008','005',85)
- insert into score values('0601009','005',98)
- insert into score values('0601010','005',75)
- insert into score values('0601002','006',88)
- insert into score values('0601003','006',95)
- insert into score values('0601006','006',77)
- insert into score values('0601008','006',85)
- insert into score values('0601010','006',55)
- insert into score values('0601001','007',84)
- insert into score values('0601002','007',68)
- insert into score values('0601003','007',95)
- insert into score values('0601004','008',86)
- insert into score values('0601005','008',76)
- insert into score values('0601006','008',67)
- insert into score values('0601007','009',67)
- insert into score values('0601008','009',85)
- insert into score values('0601009','010',98)
- insert into score values('0601010','010',75)
3.练习实例
- --1)在student上创建INSERT触发器stu_insert,要求在student表中插入记录时(要求每次只能插入一条记录),这个触发器都将更新class表中的class_nun列。并测试触发器stu_insert。
- create trigger stu_insert
- on student
- for insert
- as
- update class set class_num=class_num + 1
- where class_id=(select class_id from inserted)
- --测试
- insert into student values('0602011','文','女','1986-09-21', '0602')
- --2)在student上创建DELETE触发器stu_delete,要求在student表中删除记录时,这个触发器都将更新class表中的class_nun列。并测试触发器stu_delete。
- create trigger stu_delete
- on student
- for delete
- as
- update class set class_num=class_num - 1
- where class_id = (select class_id from deleted)
- --测试
- delete from student where stu_id='0601001'
- --3)查看触发器相关信息:使用系统存储过程sp_help,sp_helptext查看触发器相关信息。
- exec sp_help
- exec sp_help stu_insert
- exec sp_helptext stu_insert
- --4)对于下列触发器:
- create trigger stu_update
- on student
- instead of update
- as
- print '修改学生表'
- drop trigger stu_update
- 执行语句
- update student
- set stu_id='0601003'
- where stu_name='鲁斌'
- 会怎么样?
- --消息 2627,级别 14,状态 1,第 1 行
- --违反了 PRIMARY KEY 约束 'PK__student__E53CAB217F60ED59'。不能在对象 'dbo.student' 中插入重复键。
- --语句已终止。
- --5)创建DDL触发器,在当前数据库中不允许删除或修改表
- create trigger data
- on database
- for drop_table, alter_table
- as
- print '不允许删除或修改表'
- rollback
此例很完整,供有需要进行练习触发器的朋友看看
sqlserver的触发器练习实例的更多相关文章
- sqlserver数据库触发器调用外部exe
sqlserver数据库触发器调用外部exe,同事可以选择参入参数! sqlserver使用 master..xp_cmdshell 进行外部exe的执行. 使用master..xp_cmdshell ...
- mysql触发器trigger 实例详解
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能 ...
- SqlServer添加触发器死锁的原因
之前遇到过SqlServer添加触发器死锁的情况,纠结了很长时间 最近发现原来是因为我在建表的时候,把id设成主键后,系统默认了加一个聚集的索引 就是聚集索引把表锁住了
- MySQL 触发器简单实例 - 转载
MySQL 触发器简单实例 触发器:可以更新,删除,插入触发器,不同种类的触发器可以存在于同一个表,但同种类的不能有多个.一个更新.一个删除是可以共存的. ~~语法~~ CREATE TRIGGER ...
- SQLServer之触发器简介
触发器定义 触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程.SQLServer允许为任何特定语句创建多个触发器.它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对数据库进行操作 ...
- 在SQLServer使用触发器实现数据完整性
1.实现数据完整性的手段 在sqlserver中,在服务器端实现数据完整性主要有两种手段:一种是在创建表时定义数据完整性,主要分为:实体完整性.域完整性.和级联参照完整性:实现的手段是创建主键约束.唯 ...
- 知方可补不足~sqlserver中触发器的使用
回到目录 触发器在过去的10年中,即存储过程和ado.net称霸江湖期间是那么的重要,而现在,trigger显得不是那么必要的,我们很少将复杂的业务写在SQL里,当然也会没有机会写到trigger里了 ...
- MySQL 触发器简单实例
~~语法~~ CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | ...
- Mysql笔记——触发器简单实例
首先贴上触发器语法吧: CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFOR ...
随机推荐
- Tomcat7配置管理员帐号密码及权限
在使用tomcat时,若要使用管理监控功能,需要用用户名密码登录使用,而tomcat7默认是将用户是注释的,所以需要配置后使用, 配置文件为根目录下的/conf/tomcat-users.xml文件. ...
- AppServ安装的一点小麻烦----
好久,没装AppServ了,今天安装过程顺利,但是Apache,服务开启不了,页面也不能访问. 刚开始以为是版本下载错误了,先后换了N个版本,都不行. 在网上搜的过程中,偶然发现,一句话:64位系统, ...
- [0] DDD领域驱动设计(二) 之 值对象
DDD中实体对象与值对象的解释比较抽象.主要根据持续性与 ID 识别来区分. ID并非某一对象的直观自然属性,而是在分析建模之 后,赋给模型中的实体类,来达到跟踪,区别,存储目的的一个特值. 结合项目 ...
- .NET Framework 各个版本介绍
.NET Framework 1.1 自1.0版本以来的改进:自带了对mobile asp .net控件的支持.这在1.0版本是以附加功能方式实现的,现在已经集成到框架的内部.安全方面的变更 - 使得 ...
- epoll的ET和LT模式比较 - 源码分析
eventpoll是一种文件,它实现了一种机制利用一条rdllist队列来避免阻塞地进行poll.eventpoll归根到底还是在使用poll.而ET比LT高效,并不在于是否使用了poll,更不能说是 ...
- 使用 FLASH DATABASE 恢复误删除的用户
场景描述 误 drop 了生产库中的用户 U1 U1 用户下面有 3 张表(T1-T3),表中数据如下所示: SQL> conn u1/u1 Connected. SQL> select ...
- 跨域访问之JSONP
跨域 在平常的工作中常常会遇到A站点的需要访问B站点的资源. 这时就产生了跨域访问. 跨域是指从一个域名的网页去请求另一个域名的资源.浏览器遵循同源策略,不允许A站点的Javascript 读取B站点 ...
- 数组 list互转
数组 list互转 String str[] = list.toArray(new String[]{}); List list= java.util.Arrays.asList(String str ...
- 怎么用jq封装插件
怎么用jq封装插件 以隔行变色为例 实现原理:1.找到表格的奇偶行,然后添加不同的class,激活行高亮显示也很简单,只要判断mouseover事件,然后添加一个class,mouseout的时候,再 ...
- JS面向对象笔记二
菜单导航,<JS面向对象笔记一>, 参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...