• 【数据库】事务与并发控制


    事务

    什么是事务

    宏观上看,事务就是一次完整的操作过程;程序角度看,事务是用户自定义的数据操作系统,由多条命令组成,内部所有命令语句要被当成一个整体,要么全部被执行,要么全部不执行(前面已经执行部分的命令都撤销—回滚)。以前的后触发器的机制就是事务。

    如:a账号要给B账号转N元钱,由两步完成:

    (1)A账户号-n;(2)B账号+n

    事务对待:上两步要么两句都成功,要么一句都不执行。

    事务的主要特征

    (1)原子性:指事务是数据的逻辑工作单位,每一步都要被执行,不可再分。

    (2)一致性:指事务的执行结果必须从数据库一个状态确定变到另一个状态。(对数据的改变是确切的,事务常用于数据修改类的操作)

    (3)隔离性:在执行一个事务的过程,不能被其它事务干扰。(即使多个事务要使用到共同的数据,那也要依次进行,不交叉并发处理)

    (4)持久性:事务一旦被提交运行,它的操作对数据库的改变影响是永远的(事务一旦完成后,不可能回滚)

    事务分类

    隐式事务

    不需要人为指定和设置,操作过程当事务对待。SQL本身提供的这些数据操纵语句自动当成事务对待的。如:

    Update 学生表 set 性别=’男’,身高=身高+0.5 where 姓名=’杨春’
    
    • 1

    详细过程:在表中定位到杨春记录—复制数据到deleted临时表—再删除本记录—再复制到inserted临时表—再修改inserted临时表的数据性别,身高—再把inserted数据存放到物理表

    显示事务

    程序员写代码时,明确显示地写出事务的开始和结束标记。 一般事务是定义在过程中的,有可能把整个过程的代码当成事务,也可以把过程的部分连续位置的代码当成事务。 明尾暗头—事务的开头是隐含的,但结束有明确标记(常用于整个过程的开头号到当前代码为事务)。

    四大事务专用语句

    (1)begin transaction: 事务开始

    (2)commit transaction: 事务到此已经成功执行,数据已经处理完成,后继语句可不当事务对待。

    (3)rollback transaction: 整数处理过程出错了,回滚到没有处理之前的数据状态,或回滚到事务内部的保存点。

    (4)save transaction: 事务内部的保存点,如果事务内有此语句,当事务回滚时,可以不全部回滚,只回滚到本位置

    例1:模拟上面银行转账

    Begin tran
     Update 支付表 set 总额=总额-n where 账号=’a’
     Update 支付表 set 总额=总额+n  where 账号=’b’
    Commit tran
    
    • 1
    • 2
    • 3
    • 4

    说明:最简单的事务。最前面的begin tran可省—明尾暗头

    例:学生表的年龄约束为10-100;身高介于1-3.0米

    begin tran
     update 学生表 set 年龄=20 where 姓名='杨春'
     update 学生表 set 身高=-1 where 名字=
    • 1
    • 2
  • 相关阅读:
    数据驱动成功:小程序积分商城的数据分析
    弘辽科技:淘宝店铺被管控还能开吗?原因是什么?
    PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)
    MacOS国产单片机正版Jlink调试配置和eclipse开发配置
    [go学习笔记.第十二章.文件操作] 2.json基本介绍
    tsconfig编译属性isolatedModules的作用
    美食杰项目(一)登录注册页
    Unity Shader 透明度效果
    深入理解Pod对象:基本管理
    高等数学(第七版)同济大学 习题7-8 个人解答
  • 原文地址:https://blog.csdn.net/qq_51601649/article/details/130663756