• 20141113--SQL 事务


    ---------------------触发器-----------------------------
    --触发器本质上还是一个存储过程,trigger
    --只不过不是通过exec调用执行,而是通过增删改查数据库的操作来触发
    --针对主外键表操作时 将关联的表一起修改
    --触发器 方便记忆的命名格式:Tr(缩写)_(表名)_(增/删/改)
    --instead of 在...之前  等于 替换操作,只执行触发器里面的语句
    --for (after) 在...之后  先执行语句在执行触发器内的语句
    select *from Student--学生信息
    
    alter trigger Tr_student_delete
    on student
    instead of delete
    as
        delete from score where sno=109
        delete from Student where Sno=109
    go
    delete from Student where Sno=109
    
    --------------------参数-------------------------
    create trigger tr_dongtai
    on teacher
    instead of delete
    as
    begin
        declare @tno char(10)
        set @tno=(select tno from deleted)--deleted虚拟表,
        update teacher set tname='刘燕' where tno=@tno
    end
    go
    drop trigger tr_dongtai
    select * from Teacher
    delete from Teacher where Tno='804'
    -----------------------------------------
    create trigger tr_teacher_insert
    on teacher 
    for insert
    as
    begin
        declare @tno varchar(50)
        set @tno =(select tno from inserted)
        delete from teachar where tno=@tno
    end
    --------------------禁用,开启
    alter table teacher disable trigger all--禁用所有触发器
    alter table teacher enable trigger all--开启所有触发器
    --all改成触发器名 可以开启或禁用单个触发器
    
    ---------------------------------
    select *from Teacher--教师信息
    select *from Course--课程信息
    select *from Score--分数,课程
    select *from Student--学生信息
    ----------------------事务------------------------
    --if @@error>0  每一句语句后可以加一个if,然后跟上goto 直接跳转到这里(事务名)
    --如果只在最后加if,则尝试执行完所有的命令语句,如果有错则回滚事务。
    --goto TranRollBack(goto 后面只是一个事务名)
    begin tran--开始事务,每个语句都会尝试执行,
    insert into student values ('111','张三','','1988-1-8','95033')
    if @@error>0--@@error 上一次的错误,0表示没错,不等于0表示有错
    goto Back--goto,跳转到.(事务名).地方
    insert into Course values ('3-105','语文','804')
    if @@error>0
    goto Back
    insert into score values ('111','3-105',98)
    if @@error>0
    begin --如果任何一条有错误 则回滚事务,等于没有执行过这些语句
    Back:--事务名
    rollback tran--回滚事务,
    end
    else--没有错误
    begin
    commit tran --提交
    end

    ----------------------------------------------

    消息输出:

    (1 行受影响)  --尝试插入了一行数据,但是后面有的语句出错,所以回滚事务, 表没有收到影响
    消息 2627,级别 14,状态 1,第 5 行
    违反了 PRIMARY KEY 约束 'PK__Course__C1FE637307020F21'。不能在对象 'dbo.Course' 中插入重复键。
    语句已终止。

  • 相关阅读:
    Html2Text
    分析文件上传过程中的HTTP头部
    去除html标签
    .NET/C#中的索引器
    MSB与LSB
    大流量网站的底层系统架构
    经典SQL语句,可以让行的数据当列来显示
    在页面弹出漂亮的提示框右下角弹出,方正的框
    ASP.NET读取XML某节点返回DataTable实例
    读取EXECL文件内容,可以支持分布
  • 原文地址:https://www.cnblogs.com/Tirisfal/p/4095041.html
Copyright © 2020-2023  润新知