• 数据库三种事务


    1、什么是事务?

       不可分割的逻辑单元,由多个操作组成。

        a.自动提交事务

        b.显示事务

        c.隐式事务

     

      --创建数据库(仓库)、表(货架)、字段(商品格子) (结构)

     1 --创建表和插入测试数据
     2 create database BankDB;
     3 use BankDB
     4  5 create table bank(
     6     bankID int primary key not null,
     7     name varchar(20) not null,
     8     accountmoney money check(accountmoney>=1)
     9 )
    10 11 insert into bank
    12 select 1001,'张三',500 union
    13 select 1002,'李四',1500 union
    14 select 1003,'王五',1000

    2、数据库的全局变量,数据库全局变量和自定义变量的区别?

         @@identity获取最近自动增长的值

         @@error 获取错误信息编号

         --凡是系统定义的变量@@

         --凡是自定义的变量都是@

     

    3、自动提交事务

         --insert

         --update

         --delete 班级表 和 学生表 (约束) sql server 默认的删除中间存在约束的时候都删除不了

     

    4、显示事务

         --开始事务 begin transaction

     1 --模拟转账的操作
     2 
     3 --因为有多个操作,至少两个 update 修改减张三的钱 update修改加李四的钱,其他还可能有系统日志和业务日志(设备编号、通过哪个业务员转,可能还有insert)
     4 
     5     
     6 
     7 declare @errorNum int=0     --定义存放错误的结果
     8 
     9 update bank
    10 
    11    set accountmoney=accountmoney-500
    12 
    13    where bankid=1001 and name='张三'     --索引或者字段较小
    14 
    15 
    16 
    17 
    18 set @errorNum=@errorNum+@@error     --如果出错,这是@@error非零的错误数字
    19 
    20 update bank
    21 
    22    set accountmoney=accountmoney+500
    23 
    24    where bankid=1002 and name='李四'
    25 
    26 
    27 
    28 set @errorNum=@errorNum+@@error     --非零的错误数字
    29 
    30 
    31 
    32 
    33 if @errorNum<>0
    34 
    35    begin
    36 
    37      rollback transaction;
    38 
    39    end
    40 
    41    else begin
    42 
    43      commit transaction;
    44 
    45    end;
    46 
    47 
    48 
    49 
    50 --事务四种特性 --原子性、一致性、隔离性、持久性 查询--对数据没有更新操作
    51 
    52 commit;
    53 
    54 update bank
    55 
    56    set accountmoney=accountmoney-500
    57 
    58    where bankid=1001 and name='张三' --索引或者字段较小 --独立的
    59 
    60 
    61 
    62 update bank
    63 
    64    set accountmoney=accountmoney+500
    65 
    66    where bankid=1002 and name='李四'

     

    5、隐式事务(sql server 要手动开启,oracle默认就是隐式事务)

        隐式事务,insert等之后数据是没有持久化的,需要commit持久化,没有commit是脏数据(存放在内存缓冲区)

        隐式事务如果开启,insert update delete 都不会自动持久化,需要大家手动的持久化

        set implicit_transactions off 开启隐式事务、off 关闭

    select * from bank
    
    rollback; --回滚 
    commit; --提交 
    
    insert into bank values(1005,'洪七公',500)

     

  • 相关阅读:
    Qt支持中文显示
    C/C++ 知识点---LIB和DLL的区别与使用(网摘)
    Inno Setup
    C/C++ 知识点---字符串函数
    es5 JSON对象
    Es567严格模式
    mysql常用命令
    promise 获取文件内容
    postman连接不了localhost问题解决
    node---处理post请求
  • 原文地址:https://www.cnblogs.com/Johnfx-home/p/13785889.html
Copyright © 2020-2023  润新知