·触发器(trigger)  

【触发器本质上还是一个存储过程,只不过不是用exe来调用执行,而是通过增删改数据库的操作】

【触发器只对增、删、改有效】

 

触发器的格式

(instead of与for的区别 如下)

instead of:

 

create trigger 触发器名(TR_表名_操作)

on 表名

instead of

--当为instead of时,go下的代码不执行只起到触发的作用,只执行as里面的代码

as

   as里面随便写代码

go

   go下的代码只能是 增或删或改

 

 

for:

create trigger 触发器名(TR_表名_操作)

on 表名

for增或删或改

--当为for时,go下的代码先执行操作,再执行as里面的代码

as

   as里面随便写代码

go

   go下的代码只能是 增或删或改

 

写触发器时,go下面代码中的增删改和表名,与on后面的表名instead of或者for后面的增删改差要一致,否则无法触发

 

 

例子:(在触发器中可以有参数)

Instead of实用:
create trigger dongtaichufa
on teacher
instead of delete
as
begin
   declare @tno varchar(20)
deleted)--deleted的作用是储存临时数据(存储的是tno为的一行数据),@tno=tno的含义是获取教师工号
   delete from teacher where tno=@tno--删除这一条数据
end
go
delete from teacher where tno= '831'
 
for实用:
create trigger tr_dongtai
on teacher
for insert
as
begin
   declare @tno varchar(20)--定义一个变量

inserted的作用是临时存储数据,(存储要插入的一行数据),@tno的含义是获取要插入的教师的编号

delete from teacher where tno=@tno --删除刚刚插入的一行数据
  
end
go
insert into teacher values('810','王五','男','1991-1-1','讲师','电子工程系')

 

 

视图(view)

1、视图窗口创建视图步骤:1·数据库名-->右键视图(新建视图)-->2·添加要连接的表-->3·选择要添加的列名

头歌SQL SERVER 专题实验10 DML触发器_触发器

 

头歌SQL SERVER 专题实验10 DML触发器_数据库_02

 

头歌SQL SERVER 专题实验10 DML触发器_触发器_03

 

 

【代码创建视图】:

   格式为:

   create view 视图名

as

select 表名.列名,表名.列名,表名.列名,表名.列名 from 表名 join 表名 on 表名.列名=表名.列名

 

--------------例如:

没用视图如下

头歌SQL SERVER 专题实验10 DML触发器_数据_04

 

用代码创建视图为:

create view shitu
as
select student.sno,sname,ssex,sbirthday,class,course.cno,cname,degree,tno from
student join score on student.sno=score.sno join course on score.cno=course.cno

 

头歌SQL SERVER 专题实验10 DML触发器_数据库_05

 

 

 

 

事务

Begin  tran----开始事务
         Commit---提交
         Rollback---回滚事务
---事务(在begin tran里面有多个代码,如果有一个发生错误,则全部停止,并返回begin tran开始处)
 
实例:
 
begin tran--事务的开始
  insert into student values('110','hh','aa','1987/1/12',5788)     —插入第一个数据为主键,110没有重复的,正确
if @@ERROR >0     --全局变量,判断上一句中是否有错,返回0没有错,不等于0则发生错误
goto tr       --如果发生错误,则跳转到名字为tr的一行(goto后面的只是个名字而已)
  insert into course  values('3-105','计算机',825)     --第一个3-105则为外键,发生错误,表中有3-105
if @@ERROR >0
begin
tr:     --接上面的tr
  rollback tran     --回滚到tran开始处
end
else      --如果没有错误的话
begin
  commit tran      --提交事务,接着往下运行
end