数据库事务 --- Database Transaction
数据库事务 --- Database Transaction
- 什么是事务(transaction)
- ACID性质
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
- 数据库冲突 -- Conflicts
- serial execution
- Read-Write (RW) ---- "unrepeatable reads"
- Write-Read (WR) --- "dirty reads"
- Write-Write (WW) --- "lost updates"
- 幻读 --- Phantom Problem
- Different Transaction Type
- 数据库隔离-- Isolation
- SQL Isolation Level
- 如何实现Isolation
- 数据库恢复 -- Recovery
什么是事务(transaction)
- 数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求
ACID性质
原子性(Atomicity)
- 即一组数据库命令要么都执行,要么都不执行
- 以银行转账事务为例,如果该事务提交了,则这两个账户的数据将会更新。如果由于某种原因,事务在成功更新这两个账户之前终止了,则不会更新这两个账户的余额,并且会撤销对任何账户余额的修改,事务不能部分提交
一致性(Consistency)
- 当事务完成时,数据必须处于一致状态
- 也就是说,在事务开始之前,数据库中存储的数据处于一致状态。在正在进行的事务中. 数据可能处于不一致的状态. 当事务成功完成时,数据必须再次回到已知的一致状态
- 以银行转账事务事务为例。在事务开始之前,所有账户余额的总额处于一致状态。在事务进行的过程中,一个账户余额减少了,而另一个账户余额尚未修改。因此,所有账户余额的总额处于不一致状态。事务完成以后,账户余额的总额再次恢复到一致状态
隔离性(Isolation)
- 对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
持久性(Durability)
- 事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。
- 一个事务成功完成之后,它对数据库所作的改变是永久性的,即使系统出现故障也是如此。也就是说,一旦事务被提交,事务对数据所做的任何变动都会被永久地保留在数据库中。
数据库冲突 – Conflicts
serial execution
- An execution is “good” if it is serial (transactions are executed atomically and consecutively) or serializable (i.e. equivalent to some serial execution)
- serial execution
- serializable
Read-Write (RW) ---- “unrepeatable reads”
- (RW): T1 reads a data object that is subsequently written by T2
- T1两次R(A)读取的值不一样
Write-Read (WR) — “dirty reads”
- 在T1写入的过程中, T2读取被更新的数据. 但是由于某些原因T1回滚, 回到最初状态, 则T2读取的是dirty data
Write-Write (WW) — “lost updates”
- T1 writes a data object that is also subsequently written by T2
- T1的W(A)被T2的W(A)覆盖
幻读 — Phantom Problem
- 两次读之间有别的事务增删
- 一个事务A读取到了另一个事务B新提交的数据。比如,事务A对一个表中所有行的数据按照某规则进行修改(整表操作),同时,事务B向表中插入了一行原始数据,那么后面事务A再对表进行操作时,会发现表中居然还有一行数据没有被修改。
Different Transaction Type
Read-Only Transaction
- When a transaction only reads information, we have more freedom to let the transaction execute concurrently with other transactions
SET TRANSACTION READ ONLY;
SELECT * FROM Accounts
WHERE account#=‘1234’;
Read-Write Transaction
SET TRANSACTION READ WRITE;
update Accounts
set balance = balance - $100
where account#= ‘1234’; .
数据库隔离-- Isolation
SQL Isolation Level
- 以上的所有冲突都和数据库隔离级别相关
READ UNCOMMITTED
- 最低隔离级别
- 一个事务能读取到别的事务未提交的更新数据,很不安全
- 可能出现丢失更新、脏读、不可重复读、幻读;
READ COMMITTED
- 一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,
- 不会出现 丢失更新、脏读
- 可能出现不可重复读、幻读;
- 这个也是Oracle数据库默认隔离级别
REPEATABLE READ
- 保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响
- 不可能出现丢失更新、脏读、不可重复读,
- 可能出现幻读;
SERIALIZABLE
- 最高隔离级别,不允许事务并发执行,而必须串行化执行,最安全
- 不可能出现更新、脏读、不可重复读、幻读,但是效率最低。
如何实现Isolation
- 基本思路 — 锁
- Before a read, a shared lock must be acquired
- Before a write, an exclusive lock must be acquired
READ UNCOMMITTED
- 当读取数据时不加任何锁
- 当更新数据时, 要对数据加 exclusive lock,直到事务结束时释放
READ COMMITTED
- 当读取数据时,要对数据加 read-lock
- 当更新数据时, 要加 exclusive lock, 直到事务结束时释放
REPEATABLE READ
- 当读取数据时, 要对数据加shared locks, 直到事务结束时释放
- 当更新数据时, 要加 exclusive lock, 直到事务结束时释放
SERIALIZABLE
- 当读取数据时, 要对数据加shared locks, 同时对index 加锁, 直到事务结束时释放
- 当更新数据时, 要加 exclusive lock, 直到事务结束时释放
数据库恢复 – Recovery
Mirroring
- keep two copies of the database and maintain them simultaneously
Backup
periodically dump the complete state of the database to some form of tertiary storage
System Logging
- the log keeps track of all transaction operations affecting the values of database items
- The log is kept on disk so that it is not affected by failures except for disk and catastrophic failures.
数据库事务 --- Database Transaction相关推荐
- 数据库事务(Database Transaction)
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务由事务开始(begin transaction)和事务结束(commit transaction或 ...
- 高级数据库三:浅谈数据库事务(transaction)
事务的定义 事务(txn)是一系列在共享数据库上执行的行为,以达到更高层次更复杂逻辑的功能.事务是DBMS中最基础的单位,事务不可分割. ACID ACID,是指在可靠数据库管理系统(DBMS)中,事 ...
- 浅谈数据库事务(transaction)
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/u013007900/article/details/77927723 事务的定义 只有增删改才会用到事务 ...
- 数据库事务的四大特性和隔离级别
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即 ...
- 数据库事务系列-事务模型基础
从这篇文章开始,笔者将会在接下来很长时间里整理记录一个相对独立的知识领域-数据库事务,之所以忽然有这个想法,说来也是一种机缘巧合.本来是单纯计划写写HBase行级事务模型的具体实现的,但是在周末一不小 ...
- 数据库事务的隔离机制
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.----百度百科 就是说你定义一组数据库操作,然后告诉数据库说这些 ...
- channelfuture怎么拿到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾
SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾 作者:一一哥 本节主要内容 一. 事务出现的原因 转账是生活中常见的操作,比如从A账户转账100元到B账 ...
- getprivateprofilestring读不到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾
SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾 作者:一一哥 本节主要内容 一. 事务出现的原因 转账是生活中常见的操作,比如从A账户转账100元到B账 ...
- MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)
第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...
最新文章
- Pascal 错误代码及含义
- linux命令之远程文件或文件夹拷贝-scp
- 剑三千岛湖服务器是不是维护了,《剑网3》4.10维护公告:疆域重新进行地理划归...
- MakeItTalk:Adobe 语音驱动的头部动画
- Adobe Edge Animate --点击元件内部元素使元件其他元素发生改变
- WebAPI框架里设置异常返回格式统一
- 西门子1500和300哪个贵_西门子S7-1500凭什么秒杀S7-300-400?
- android label关闭按钮,iOS弹出关闭按钮标签:“OK”还是“Okay”?
- 以一种访问权限不允许的方式做了一个访问套接字的尝试。
- 土豆英雄抽传说卡程序(非土豆英雄玩家不要看)
- 使用google翻译api
- Java根据关键字在PDF/Word插入图片
- java中验证国际手机号码
- Ubuntu 实时网速查看命令
- macOS Big Sur 11.6.3 (20G415) 正式版 DMG、ISO、IPSW 下载
- 2014年蓝桥杯预赛 C/C++本科B组 解题报告 史丰收速算
- C#转换Excel表格中的科学计数法数字
- 【编程题】【Scratch三级】2019.06 幻影小猫
- vr线上虚拟展馆H5三维购物带的便利【商迪3D】与您细说
- 2022年度编程语言排行榜来啦,它凭什么能超过C语言,排名第一?
热门文章
- gitlab13.7关闭用户邮箱验证方式
- 未知标记 html问题,显示错误:未知的HTML标记_phpstorm_开发99编程知识库
- updates/7/x86_64/primary_db FAILED
- kali 日常应用安装
- mysql connector net 5.0_asp.net连接Mysql(connector/net 5.0)
- 工厂模式三部曲之二_工厂模式
- 如何打开.lxe文件
- 太空物体(一般情况)
- 程序员的成长故事之 五年技术之路
- js手机号验证码注册