Mysql事务

2020-12-11  本文已影响0人  macfee333
事务系列知识:

[图片上传失败...(image-8127f5-1607620428430)]

事务特性:

ACID:原子性(Atomicity)、一致性(Consistent)、隔离性(Isalotion)、持久性(Durable)


"原子性" 大致原理:

基于日志的Redo/Undo机制(将所有对数据的更新操作都写到日志中),Redo log用来记录某数据块被修改后的值,可以用来恢复未写入 data file 的已成功事务更新的数据;Undo log是用来记录数据更新前的值,保证数据更新失败能够回滚

redo log原理:

[图片上传失败...(image-676dde-1607620428430)]

  1. 执行update操作。
  2. 先将原始数据从磁盘读取到内存,修改内存中的数据。
  3. 生成一条重做日志写入redo log buffer,记录数据被修改后的值。
  4. 当事务提交时,需要将redo log buffer中的内容刷新到redo log file。
  5. 事务提交后,也会将内存中修改数据的值写入磁盘
  • 原子性,是redo log记录了事务期间操作的物理日志,事务提交之前,并没有写入磁盘,保存在内存里,如果事务失败,数据库磁盘不会有影响,回滚掉事务内存部分即可。
  • 持久性,redo log 会在事务提交时将日志存储到磁盘redo log file,保证日志的持久性

undo log原理:

undo log是逻辑日志,只是将数据库逻辑的恢复到原来的样子。并不能将数据库物理地恢复到执行语句或者事务之前的样子。虽然所有的逻辑修改均被取消了,但是数据结构和页本身在回滚前后可能不一样了
既然是逻辑日志,可以理解为它存储的是SQL, 在事务中使用的每一条 INSERT 都对应了一条 DELETE,每一条 UPDATE 也都对应一条相反的 UPDATE 语句。
[图片上传失败...(image-e198fc-1607620428430)]


Mysql事务隔离级别:

并发事务带来哪些问题?

[图片上传失败...(image-541975-1607620428430)]

查询、修改mysql事务隔离级别:

mysql8 查询:

select @@global.transaction_isolation,@@transaction_isolation;

mysql8修改:

set session transaction isolation level read committed;
隔离级别 脏读 不可重复读 幻读
READ-UNCOMMITTED
READ-COMMITTED ×
REPEATABLE-READ × x
SERIALIZABLE × × ×

参考:
https://zhuanlan.zhihu.com/p/29166694
https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/MySQL.md

上一篇下一篇

猜你喜欢

热点阅读