• 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

     

     

  • 相关阅读:
    Scala 插入排序
    win10下安装使用mysql-8.0.18
    Autofac注入多数据库(DbContext)
    缓存一致性问题以及方案(一) Redis
    Java编程中,一些好的习惯从一开始就值得坚持
    IDEA项目无法引用本地Class类,引用路径正确但报错标红
    git怎么撤销已经push到远端的commit?
    git的命令大全及如何修改git账号和提交的邮箱和用户名
    renren-fast-vue无法运行相关问题解决办法n ./src/assets/scss/index.scss Module build failed: Error: ENOENT: no su
    VsCode系列(一):下载安装及汉化
  • 原文地址:https://www.cnblogs.com/hqjy/p/4092217.html
Copyright © 2020-2023  润新知