数据库事务原子性,一致性是怎样实现的

数据库事务原子性,一致性是怎样实现的,第1张

原子性:一个事务内的所有SQL *** 作是一个整体。都执行成功才算整个事务成功。如果某个失败,则必须要会退到事务执行之前的状态,执行成功的SQL需要被撤销。

innodb通过undo log和redo log来实现。

事务中,每当执行一条SQL语句对数据产生了影响,就会记录下来与之相反的 *** 作到undo log(撤销日志)中,例如,更新会记录之前的状态,删除会形成insert,添加会形成delete,一旦事务被回滚,则执行undo log中记录的 *** 作,来完成恢复到之前的状态。这里是个 逻辑恢复哦!同时,每当执行一条事务中的SQL,会将 *** 作记录到redo log中,此时事务一旦被提交,就将该redolog中的 *** 作,持久化到磁盘上,数据就持久的记录下来了(ACID的D)。

PS:还有,undolog才是原子性的关键。提供redolog,应该主要目的是提升磁盘的IO开销吧,如果直接写入磁盘,IO开销,会很大。如果先将 *** 作记录到redolog中,可以顺序的记录,批量的记录,再一起同步到磁盘上,速度会比直接写磁盘快些。 mysql在生成redolog时,会使用 innodb log buffer,先缓冲到内存中,再同步到redolog上,速度会更快。

另外关于,一致性,应该是个整体概念,保证所有的mysql对象(数据,索引,约束,日志,用户)在事务执行前后都具有完整的特性,应该是mysql所有的功能都为此服务吧!

1、原子性:在整个 *** 作的事务中,要么全部成功,要么全部失败。

2、隔离性:所谓隔离性,就是每个事务执行的时候,相互之间不会受到影响,都是单独的事务。

3、一致性:也就是说事务在执行之后,必须和之前的数据保持一致。

4、持久性:事务一旦提交,就会持久化到数据库中,不能回滚。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7551365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存