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

     

     

  • 相关阅读:
    oracle列合并
    Java移位操作符
    angularjs 事件向上向下传播
    angularjs 路由 ngRoute tab切换
    angularjs 自定义服务
    angularjs 服务供应商
    angularjs 缓存 $q
    angularjs $location 服务
    angularjs $http 服务
    angularjs 自定义指令 directive
  • 原文地址:https://www.cnblogs.com/hqjy/p/4092217.html
Copyright © 2011-2022 走看看