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

数据库事务原子性,一致性是怎样实现的,第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所有的功能都为此服务吧!

不并发控制的话会带来一系列问题:数据冗余、更新异常、插入异常、删除异常等

并发控制保证事务4个特性,acid:A:原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸 *** 作要么全做,要么全不做。C:一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。I:隔离性 (Isolation) 一个事务的执行不能被其他事务干扰。 D:持续性/永久性(Durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

程序的原子性指:整个程序中的所有 *** 作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

原子性 *** 作:原子性在一个 *** 作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个 *** 作一旦开始,就不会被其他线程所干扰。

扩展资料:

redis的原子性:

Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;

Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增 *** 作 实现简单计数器功能

redis 实现事务的原理:

批量 *** 作在发送 EXEC 命令前被放入队列缓存

收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令都不会被执行

在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

参考资料:百度百科——acid


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

原文地址: http://outofmemory.cn/sjk/9928229.html

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

发表评论

登录后才能评论

评论列表(0条)

保存