zoukankan      html  css  js  c++  java
  • sql中的触发器、视图、事务

    ·触发器(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)

       set @tno=(select tno from 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)--定义一个变量

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

       delete from teacher where tno=@tno --删除刚刚插入的一行数据

      

    end

    go

    insert into teacher values('810','王五','男','1991-1-1','讲师','电子工程系')

     

     

     

    视图(view)

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

    【代码创建视图】:

       格式为:

       create view 视图名

    as

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

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

    没用视图如下

    用代码创建视图为:

    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

     

     

     

     

     

    事务

             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

     

     

  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/hqjy/p/4092217.html
Copyright © 2011-2022 走看看