SQL触发器实例(上)

  1 --1.) 创建测试用的表(testTable)
  2 if exists (select * from sysobjects where name='testTable')
  3 drop table testTable
  4 GO
  5 Create Table testTable
  6 (
  7 testField varchar(50)
  8 )
  9 
 10  select * from testTable
 11 
 12 
 13 
 14 --2.) 创建基于表(testTable)的触发器(testTrigger)
 15 IF EXISTS (Select name FROM sysobjects Where name = 'testTrigger' AND type = 'TR')
 16 Drop TRIGGER testTrigger
 17 GO
 18 Create Trigger testTrigger 
 19 ON testTable 
 20 for Insert,Delete,Update
 21 AS
 22 if exists(select * from inserted)
 23      if exists(select * from deleted)
 24          print '...更新'
 25      else
 26          print '...插入'
 27 else
 28      if exists(select * from deleted)
 29          print '...删除'
 30 Go
 31 
 32 
 33 --.) 操作testTable表,测试触发器testTrigger
 34 --分别执行Insert Into语句,Update语句,Delete语句,看看效果
 35 Insert Into testTable values ('testContent!')
 36 
 37 Update testTable Set testField = 'UpdateContent'
 38 
 39 Delete From testTable
 40 
 41 select * from testTable
 42 
 43 
 44 --用到的功能有: 
 45         --1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 
 46         --2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录,等等。
 47 
 48  --这时候可以用到触发器。对于需求1,创建一个Update触发器: 
 49 
 50      Create Trigger truStudent 
 51 
 52        On student      --在Student表中创建触发器 
 53        instead of Update      --为什么事件触发 
 54      As           --事件触发后所要做的事情 
 55        if Update(stuID)            
 56        begin 
 57 
 58          Update borrow 
 59            Set stuID=i.stuID 
 60            From borrow as br , Deleted as d ,Inserted as i      --Deleted和Inserted临时表 
 61            Where br.stuID=d.stuID 
 62 
 63        end   
 64 
 65 drop trigger truStudent
 66 UPDATE student set stuID='1006' WHERE stuID='1005'
 67 
 68 
 69     Create trigger trdStudent
 70        On Student 
 71        instead of Delete 
 72      As 
 73      Delete Borrow 
 74    From Borrow as br , Deleted as d Where br.StuID=d.stuID 
 75 
 76 drop trigger trdStudent
 77 delete FROM student WHERE stuID='1004'
 78 
 79 disable trigger trdStudent on Student
 80 
 81 select * from book
 82 select * from borrow
 83 select * from student
 84 
 85 
 86 --创建触发器(对删除表的约束)
 87 create trigger droptabel
 88 on database
 89 for drop_table
 90 as
 91 print'删除表吗?'
 92 print'不能删除表'
 93 rollback transaction
 94 go
 95 
 96 drop table students
 97 disable trigger droptabel on database    --关闭触发器
 98 enable trigger droptabel on database
 99 
100 
101 
102 
103 
104 CREATE TABLE students  --学生信息表
105 (
106   stuID CHAR(10) primary key,  --学生编号
107   stuName  CHAR(10) NOT NULL ,     --学生名称
108   major  CHAR(50) NOT NULL    --专业
109 )
110 GO
111 
112 
113 CREATE TABLE borrowS  --借书表
114 (
115  borrowID  CHAR(10) primary key,    --借书编号
116 stuID CHAR(10) NOT NULL, --学生编号
117 BID  CHAR(10) NOT NULL,--图书编号
118  T_time  datetime NOT NULL,   --借出日期
119  B_time  datetime    --归还日期
120 )
121 GO
122 
123 SElect * from students
124 select * from borrows
125 
126 Create Trigger truStudents 
127 
128        On students      --在Student表中创建触发器 
129        for Update      --为什么事件触发 
130      As           --事件触发后所要做的事情 
131        if Update(stuID)            
132        begin 
133 
134          Update borrows 
135            Set stuID=i.stuID 
136            From borrows as br , Deleted as d ,Inserted as i      --Deleted和Inserted临时表 
137            Where br.stuID=d.stuID 
138 
139        end   
140 
141 
142 
143 UPDATE studentS set stuID='1006' WHERE stuID='1005'
144 
145 
146     Create trigger trStudent
147        On Students 
148        for Delete 
149      As 
150        Delete borrows 
151          From borrows AS br , Deleted AS d 
152          Where br.stuID=d.stuID 
153 
154 
155 drop trigger trStudent
156 
157 
158 delete from students where stuID='1001'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

Hibernate框架HQL语句

这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利。 在这里通过定义了三个类,Special、Classroom、Student来做测试,Special...

2675
来自专栏Hongten

sql之left join、right join、inner join的区别

Please refer the link : https://www.codeproject.com/Articles/33052/Visual-Repres...

513
来自专栏Java成神之路

Oracle学习笔记_03_单行函数

单行函数:        操作数据对象        接受参数返回一个结果 只对一行进行变换  每行返回一个结果        可以转换数据类型      ...

713
来自专栏乐沙弥的世界

PL/SQL 联合数组与嵌套表

      通常情况下,在PL/SQL中,处理单行单列的数据可以使用标量变量,而处理单行多列的数据则使用PL/SQL记录是不错的选择。单列多行数据 则由联合数组...

593
来自专栏木宛城主

利用Microsoft.VisualBasic中TextFieldParser解析器把CSV格式倒入数据库

写了个Demo,利用Microsoft.VisualBasic这个程序集中的TextFieldParser解析器解析CSV格式的文件,然后将解析的数据插入到相...

17010
来自专栏Python、Flask、Django

mysql视图,ThinkPHP视图

1344
来自专栏IT探索

mysql用法进阶

select name from table_name order by convert(name using gbk) asc

1143
来自专栏GreenLeaves

Oracle 分页查询

本文使用到的是oracle数据库scott方案所带的表,scott是oracle数据库自带的方案,使用前请确保其解锁 ? Oracle分页一共有三种 1、使用r...

2038
来自专栏Grace development

[其它 Other] ci数据库工具类扩展

ci的数据库工具类、没有获取数据表列表等等的方法。在这里做了个扩展。主要用于做数据中心管理的。

563
来自专栏c#开发者

Oracle 最常用功能函数经典汇总

Oracle 最常用功能函数经典汇总 SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(...

3977

扫码关注云+社区