zoukankan      html  css  js  c++  java
  • 事物处理

    一、事务的概念

    概念:数据库中的事物是一种机制,是一个不可分割的工作逻辑单元

    属性:1、原子性:哥哥元素是不可分的

    2、一致性:所有的数据都保持一致状态

    3、隔离性:对数据进行修改的所有并发事务是彼此隔离的

    4、持久性:操作结果对于系统的影响应该是永久的

    作用:要么所有作用全部完成,要么所有操作全部不执行,这样一来,要么增加和减少的廋执行完毕,一旦出错,就回滚到什么都没有执行的状态

    二、创建事务

    1、显示事务

    开始事务:begin transaction

    提交事务:commit transaction

    回滚事务:rollback transaction

    2、隐式事务

    set implicit_trasactions on 开启

    commit transaction

    rollback transactioni

    三、创建事务的原则

    1、事务要尽可能短

    2、访问的数据尽量少

    3、浏览数据时尽量不要打开事务

    4、在事务处理期间尽量不要请求用户输入

      

    use Bank
    go
    --判断存储过程是否存在
    if object('proc_transfer','procedure') is not null
        drop procedure proc_transfer
    go
    --转账的存储过程
    create procedure proc_transfer
           @intoAccountName varchar(20),--转入账户
          @outAccountName varchar(20),--转出账户
          @money money--转出金额
    as
    --判断转户名是否存在
    if not exists(select 1 from AccountInfo where accountName=@intoAccountName)
           begin
                  print '转入账户不存在'
                  return
           end
    if not exists(select 1 from AccountInfo where accountName=@outcountName)
           begin
                  print '转入账户不存在'
                  return
           end
    declare @errorSum int--声明一个变量,用于累加错误
    set @errorSum=0 --初始化,没有错误
    begin transaction  --开始事务
    --执行update语句
    update AccountInfo set currentMoney=currentMoney-@money
    where accountName=@outAccountName
    set @errorSum=@errorSum+@@error  --累加错误
    update AccountInfo ser currentMoney=currentMoney+@money where
    accountName=@intoAccountName
    set @errorSum=@errorSum+@@error  --累加错误
    if @errorSum<>0
       begin
              print '转账失败,回滚事务'
              rollback transaction
       end
    else
        begin
               print '转账成功'
               commit transction
        end
    go

    五、事务的级别

    1、read uncommitted 不隔离数据

    2、read committed(默认)不允许读取没有提交的数据

    3、repeatable read

    4、snapshot快照隔离

    5、serializable讲事务所要用到的数据表全部锁定

    语法

    set transaction isolation level 隔离级别(以上5种)

    T-SQL语句

  • 相关阅读:
    Apache Doris 编译
    Jmeter(二十五)
    Jmeter(二十四)
    Jmeter(二十三)
    Jmeter(二十二)
    Jmeter(二十一)
    Jmeter(二十)
    jmeter-“java.net.SocketException: Socket closed“解决方法
    JMeter测试出现java.net.SocketException: Permission denied: connect 解决方案
    jmeter压测org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:8999 [/127.0.0.1] fail
  • 原文地址:https://www.cnblogs.com/dclcc/p/3075295.html
Copyright © 2011-2022 走看看