- 1 简介
- 2 什么是数据库事务?
- 2.1 事务的四大特性(ACID)
- 3 并发事务会导致的问题
- 3.1 本文会使用到的 SQL 语句
- 3.1.1 示例表结构
- 3.1.2 查询事务的默认隔离级别
- 3.1.3 设置当前会话的事务隔离级别
- 4 事务的4种隔离级别和示例演示
- 4.1 读未提交
- 4.2 读已提交
- 4.3 可重复读
- 4.4 串行化
事务的4种隔离级别分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、 可重复读(Repeatable Read)和串行化(Serializable)。
首先,在了解这4种隔离级别前就必须先要了解其前提,也就是事务,本文简单介绍一下关于事务。
之后,我们也要理解这4种隔离级别产生的原因和场景展现以及4种隔离级别是如何解决问题的。
2 什么是数据库事务?事务由一个有限的数据库 *** 作序列组成,这些 *** 作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
例如一个银行转账场景:
A转账B 100元,A的账号扣除100元,B的账号加上100块。假如中间出现任何异常,例如,在A的账号扣100元时,银行瘫痪,B的账号余额没有发生变化。这时候就需要事务来保证将A的钱还回去。
2.1 事务的四大特性(ACID)- 原子性:事务作为一个整体被执行,包含在其中的对数据库的 *** 作要么全部都执行,要么都不执行。
- 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
- 隔离性:多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。
- 持久性:表示事务完成提交后,该事务对数据库所作的 *** 作更改,将持久地保存在数据库之中。
- 脏读:事务 A 读取了事务 B 更新的数据,然后 B 进行回滚 *** 作,那么A读取的数据就是脏数据
- 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次夺取同一数据时,结果不一致。
- 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)