事物的四大特性?
ACID
1.原子性 atomicity
一个事物是一个不可分割的工作单位,其中的操作,要么都做,要么不做。不存在中间状态。
2.一致性 consisitency
事物执行的前后,数据必须处于一种合法的状态。(可以自己定义 ,保持数据的一致性。)
3.隔离性 lsolation
多个事物并发执行的时候,事物内部的操作与其他事物是隔离的,并发执行,互不干扰。
4.持久性 Durability
事物一旦提交,对数据库的改变是永久性的。不受任何影响。
四大特性的实现原理?
1.mysql如何保证一致性的?
两个层面。
/*
1.数据库 通过原子性, 持久性,隔离性,来保证一致性。
AID 三大特性,是前提。
2.应用层面 通过代码判断数据库数据是否有效,然后再决定是回滚还是提交数据。
*/
2.mysql怎怎么保证原子性的?
/*
1.利用innodb的undo log。 叫做回滚的日志
当事务回滚的时候,能够撤销所有已经成功执行的SQL语句,需要记录你要回滚的响应日志
2.举例说明
当你update一条数据,需要记录之前的旧值,回滚的时候,根据旧值进行update操作。
undo log 记录了这些回滚需要的信息,当事务执行失败,就可以以利undo log 中的信息
将数据回滚到修改之前的样子。
*/
3.mysql怎么保持久性的?
/*
1. 是利用innodb 的 redo log。、
mysql把磁盘上的数据加载到内存中,在内存中对数据进行修改,在刷回磁盘上。
此时宕机,内存中的数据就会丢失。
2.如何避免宕机?
在事物提交之前将数据写入磁盘中。——–【引发的问题。】》只修改一个页面里的一个字节,就要将整个页面刷入磁盘,太浪费资源了
毕竟一个事务里的SQL可能牵涉到多个数据页的修改,而这些数据页可能不是相邻的,
也就是属于随机IO。显然操作随机IO,速度会比较慢。
3.采用redo log?
做数据修改的时候,不仅在内村中操作,还会在redo log 中记录这次操作,
提交事物的时候,会将redo log 日志进行刷盘 redo log 一部分在内存中,一部分在磁盘上。
数据库宕机重启,就将redo log中的内容恢复到数据库中,再根据undo log 和binlog 内容决定
回滚还是提交数据。
4.好处?
redo log 体积小,只记录了那一页修改了什么,体积小,刷盘快。
一直往末尾进行追加,属于顺序io.效率比随机io来快。
*/
4.mysql怎么保证隔离性的。
/*
利用锁 和mvcc 机制。
MVCC,即多版本并发控制(Multi Version Concurrency Control),
一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。
如果一个事务读取的行正在做DELELE或者UPDATE操作,
读取操作不会等行上的锁释放,而是读取该行的快照版本。
在事务隔离级别为读已提交(Read Commited)时,一个事务能够读到另一个事务已经提交的数据,
是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中,是满足隔离性的。
*/
今天的文章事务四大特性以及实现原理是什么_事务的实现原理「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86080.html