数据库 事务理解

参考:https://www.cnblogs.com/NanoDragon/p/12650049.html
https://zhuanlan.zhihu.com/p/117476959
https://www.zhihu.com/question/31346392

一、什么是事务?

一组原子性的查询语句,或者说一个独立的工作单元,就是如果要执行这个单元,要吗全部成功,要么全部失败,中间如果有一部分无法执行,就整体都不会执行。
用我们比较通俗的语言来解释一下,例如两张银行卡之间进行转账操作,我们简单理解分为 3步
第一步,查询A 卡金额是否大于 1 万元
第二步,A 卡减去 1万元
第三步,B卡增加 1 万元。
这3步可以简化抽象为一个事务。要么转账成功,要么转账失败。

二、事务的 ACID 特性

1、原子性 atomicity

不可再拆分的单元,要么成功,要么失败,不能一部分成功

2、一致性 consistency

数据库总是从一个正确的状态到另一个正确的状态
而ACID就是说事务能够通过AID来保证这个C的过程.C是目的,AID都是手段

3、隔离性 isolation

通常来说(还依赖事务的隔离级别),一个事务所有的未提交的修改对其他事务来讲是不可见的,是相互隔离的

4、持久性 durability

一旦事务提交,结果就会被永久性的保存下来,即使后面发生网络异常,服务器宕机也不会影响提交结果。

脏读,不可重复读,幻读

1、可重复读

在事务A 中,从开始到结束的任意时间段内,读取的数据都是一致的。

2、脏读

在事务 A 有未提交的修改时,然后事务 B 读取A修改后的数据,但是事务 A 又因为某些原因撤回了自己的修改再提交,此时 B 读取到的数据就是脏数据。

3、不可重复读

在事务 A内, 读取了一次数据后,一段时间再次读取数据时,【数据内容发生了修改】。

4、幻读

在事务 A内,读取了一次数据后,一段时候再次读取数据是,【数据记录行数发生了更新】。

事务的四个隔离级别

事务的四个隔离级别分别定义了一个事务中所做未提交的修改,在另外一个事务中的可见程度。mySql 还有一种默认的隔离级别是 【2、可重复读 (REPEATABLE READ)】

1、串行读 SERIALIZABLE

串行方式,隔离级别最高的一种,读取每一行数据都加锁,会有严重的超时问题。

2、可重复读 (REPEATABLE READ)

一个事务的多个实力并发读取数据时,读取到的数据是一致的。

3、读提交 (READ COMMITTED)

所有事物只能读取其他事务已经提交的修改

4、读未提交(READ UNCOMMITTED)

所有事务都可以读取其他事务未提交的修改

其他

1、什么是自动提交?

Mysql 默认采用自动提交的模式,也就是说,如果不正式的开始一个事务,则每个查询都被当作一个事务来处理。

2、MySQL存储引擎类型有哪些?

最常用的存储引擎是InnoDB引擎和MyISAM存储引擎,InnoDB是MySQL的默认事务引擎。

猜你喜欢

转载自blog.csdn.net/Misszhoudandan/article/details/109658092