触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作。
下面直接上干货,创建insert触发器、delete触发器、DDL触发器和如何查看触发器定义
1.创建三个表学生表、班级表、课程表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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.插入用例数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
--往表中插入数据(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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
--1)在student上创建<strong>INSERT触发器</strong>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上创建<strong>DELETE触发器</strong>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)查看触发器相关信息:使用系统存储过程<strong>sp_help,sp_helptext查看触发器</strong>相关信息。 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)创建<strong>DDL触发器</strong>,在当前数据库中不允许删除或修改表 create trigger data on database for drop_table, alter_table as print '不允许删除或修改表' rollback |