数据库---事务(二)
事务特性(ACID)
原子性:
所有步骤要么都执行,要么都不执行,一旦在某个步骤出现错误,则需要进行回滚。一致性:
保证数据的正确性:例如:A给B转账100,则在转账之后与转账之前数据应该保持正确(A,B总金额前后一致),保证业务数据不能出错。隔离性:
当多个用户同时操作同一张数据表时,数据库需要为每个用户开启一个事务,保证多用户之间的操作不能被其他用户干扰,多个事务之间互相隔离。
例如:在A,B两个并发的事务中,在事务A看来,事务B已经执行结束或者还没有开始执行,在事务B看来,事务A已经执行结束或者还没有开始执行,类似于一种排队执行的思想。持久性
一旦事务提交成功,则会将数据保存到数据库中。
例如:当转账成功,两个账号的金额会发生变化,则会将金额保存到数据库中永久保存。数据备份多个。
我们先看一下数据库的隔离级别:
修改隔离级别的语句:set global transaction isolation level 隔离级别
查看隔离级别:select @@tx_isolation
mysql默认采用repeatable read重复度隔离级别。
oracle默认采用read committed读已提交的隔离级别。
什么是脏读?
如果两个事务并发执行,一个事务读取了另一个事务没有提交的数据。事务B读取事务A执行的表,然后事务A回滚,事务B则读出的数据时脏数据,称为脏读。
什么是不可重复读
事务A多次读取同一个数据,事务B在事务A多次读取数据的时候,对数据进行修改,导致事务A多次读到的数据不一致。
什么是幻读?
事务A与事务B同时操作一张表,事务A对该表的增加或删除操作,事务B是读不到的,类似于事务B在读数据之前对该表增加了一个标记,标记该表只能读取到该标记的位置,后面数据表发生改变则读取不到。导致读取的数据与数据表的数据不一致。
不可重复读侧重对数据库的修改,幻读侧重对数据库的增加,解决不可重复读需要锁满足的条件,幻读我们需要进行锁表。
隔离级别的效率:
读未提交的(read uncommitted)> 读已提交的(read committed)> 不可重复读(repeatable read)> 串行化(serializable)
数据库中如何实现隔离级别
读未提交:性能最高,路子最野,压根没加锁,所以没有任何隔离效果,我们可以认为它什么也没有做。
读已提交:先对读未提交的数据后面加上commit,解决读脏数据的问题。
两个事务对同一个数据进行修改,数据最终结果与最后一个修改的一致。当事务A对该数据进行修改时,会加锁,这时如果事务B也想对该数据进行修改则阻塞等待,当事务A对该数据修改完后,释放锁资源,事务B得到锁资源对数据进行修改,但是事务B阻塞等待时会有一个默认等待时间,如果超过该等待时间则超时等待,需要重新对该表进行操作。可重复读:为了实现可重复读,MySQL采用多版本并发控制。
串行化:读的时候加共享锁,表示其他事务只能读,但是不能进行修改,写的时候加排它锁,表示其他事务不能读不能写。
数据库---事务(二)相关推荐
- 数据库事务ACID原则学习分享
本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注! 一.事务概念的引入 当今,信息化技术非常发达的时代,我们通过手机上的银 ...
- mysql 数据库事务 (二)隔离级别
属于事务四大特性之一的隔离性(isolation),解决两个并发事务同时访问数据库表相同的行时,可能存在的问题 目录 基础 四大隔离级别 隔离级别与一致性关系 如何设置 作用范围 补充: 额外: 第一 ...
- JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD
JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...
- 深入Spring数据库事务管理(二)
文章目录 五.数据库的相关知识 (一)ACID特性 (二)丢失更新 第一类丢失更新 第二类丢失更新 (三)隔离级别 脏读 读写提交 不可重复读 幻读 六.选择隔离级别和传播行为 (一)选择隔离级别 ( ...
- Mysql数据库事务详解
80年代中国人结婚四大件:手表.自行车.缝纫机.收音机(三转一响).要把事务娶回家需要四大件,所以事务很刻薄(ACID),四大件清单:原子性(Atom).一致性(Consistent).隔离性(Iso ...
- mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...
上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...
- Spring JDBC-Spring事务管理之数据库事务基础知识
概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...
- 大数据WEB阶段(十八)数据库事务
数据库事务 一.概述 事务的概念 事务是指逻辑上的一组操作 , 组成这组操作的各个单元 , 要么全部成功 , 要么全部失败 . 如:银行转账.. 转账核心操作其实就是两条sql ,两条都执行成功才算成 ...
- 隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
文章目录 一.数据库事务简介 二.JDBC事务处理 三.事务的ACID属性 四.数据库的隔离级别 五.设置隔离级别 一.数据库事务简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态. 事务 ...
- 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID.隔离级别.MVCC.锁,由于太长,只好拆分成上下两篇: 上:并发问题与隔离级别 主要讲事务所要解决的问题.思路,先理解 ...
最新文章
- ios wkwebview弹框_iOS WKWebView的javascript alert 不弹的解决方案
- redhat6.4中手动创建oracle11g数据库
- AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟
- Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils、openpyxl)
- word转换成pdf java代码_java代码实现word转换成pdf
- C语言递归算法将十进制转换为二进制(附完整源码)
- c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”
- ssl2648-线段树练习5【线段树】
- 对视频中的特征颜色物体(青色水杯)进行跟踪
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
- raiden_graph
- 服务网关 - jwt
- 世界第一台电脑_研发世界第一台电脑的核心人物,被美国隐瞒35年,只因他是个华人...
- 轻松搭建docker应用的mesos集群
- SVM之Libsvm工具包的安装教程
- 万由nas系统安装MySQL_ESXi安装万由OS(U-NAS 3.0.9)
- python ocr文字识别竖排繁体_古籍族谱繁体竖排中文识别图文攻略-千百OCR
- 牛客网-C语言编程入门训练
- 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细
- 哪些著名软件是用C、C++编写的?