帮人做网站一定要先收费,wordpress 归档文章,动漫做的游戏 迅雷下载网站有哪些,做网站 华普花园1、事务的特性
原子性#xff08;Atomicity#xff09;#xff1a;事务是不可分割的最小操作单元#xff0c;要么全部成功#xff0c;要么全部失败。 一致性#xff08;Consistency#xff09;#xff1a;事务完成时#xff0c;必须使所有的数据都保持一致状态。 隔离…1、事务的特性
原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败。 一致性Consistency事务完成时必须使所有的数据都保持一致状态。 隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。 持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
2、事务的隔离级别
未提交读 (Read uncommitted)是最低的隔离级别。通过名字我们就可以知首在这种事务隔离级别下一个事务可以读到另外一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。
提交读 (Read committed)也可以翻圣成读已提交通过名字也可以分析出在一个事务修改数据过程中如果事务还没提交其他事务不能读该数据。所以这种隔离级别是可以避免脏读的发生的。
可重复读 (Repeatable reads), 由于提交读隔离级别会产生不可重复读的读现象。所以比提交读更高一个级别的隔离级别就可以解决不可重复读的问题。这种隔离级别就叫可重复读。但是这种周离级别没办法彻底解决幻读。
可串行化 (Serializable)是最高的隔离级别前面提到的所有的隔离级别都无法解决的幻读在可串行化的隔离级别中可以解决。 3、undo log 和 redo log 的区别
1、redo log [!note] 持久性 缓冲池buffer pool: 主内存中的一个区域里面可以缓存磁盘上经常操作的真实数据在执行增删改查操作时先操作缓冲池中的数据若缓冲池没有数据则从磁盘加载并缓存以一定频率刷新到磁盘从而减少磁盘 IO加快处理速度。 数据页page: 是 InnoDB 存储引擎磁盘管理的最小单元每个页的大小默认为 16 KB。页中存储的是行数据。 如果我们事务提交之后存在了缓冲池里面还没有写入磁盘此时数据库宕机了。那么就会导致内存也就是缓冲池中的数据丢失我们就失去了事务的持久性。
此时 Mysql 就引入了 redo log 日志文件。 此时我们写入的操作变成了 1、事务提交之后写入缓冲区Buffer Pool 2、缓冲区写入 redo log buffer 3、redo log buffer 写入到 redo log 磁盘 4、隔一段时间之后刷新缓冲区到磁盘 5、当数据库宕机的时候调用 redo log 恢复 Buffer Pool 中的数据。 [!info] 这乍一看不还是需要一个事务调用一次磁盘 IO 吗这不就失去了 Buffer Pool 的作用了 注意redo log buffer 写到 redo log 中的时候是调用的顺序的磁盘 IO而 Buffer Pool 写入磁盘的时候调用的是随机磁盘 IO。所以说此处是保证安全性的情况下优化性能。 2、undo log [!note] 原子性一致性 undo log 记录的是当前命令相反的命令也就是回滚日志用于记录数据被修改前的信息 , 作用包含两个 : 提供回滚和 MVCC (多版本并发控制) 。undo log 和 redo log 记录物理日志不一样它是逻辑日志。 可以认为当 delete 一条记录时undo log 中会记录一条对应的 insert 记录反之亦然 当 update 一条记录时它记录一条对应相反的 update 记录。当执行 rollback 时就可以从 undo log 中的逻辑记录读取到相应的内容并进行回滚。
3、区别
redo log: 记录的是数据页的物理变化服务宕机可用来同步数据 undo log 记录的是逻辑日志当事务回滚时通过逆操作恢复原来的数据 redo log 保证了事务的持久性undo log 保证了事务的原子性和一致性