我对数据库事务“通常”如何在数据库系统中实现感兴趣,例如MySQL。
假设实际将数据写入物理数据库存储不是原子操作(现在就时钟周期而言),我不应该通过例如在一些精心选择的电缆上翻录来破坏交易时刻?
答案 0 :(得分:6)
如果数据库系统是经过仔细编写的,那么断电可能没有时间可以破坏数据,并且当停电时,不会丢失任何已提交的数据。
rdbms在实际更新数据之前首先将数据写入事务日志。崩溃后,它会重放日志,将任何挂起的更改从日志复制到数据库中,并回滚日志中尚未完成的所有事务。只有在硬盘报告对日志完成写入操作后,才会报告提交成功。
答案 1 :(得分:2)
数据库遵循ACID属性。无论什么东西爆炸,都有办法至少回滚到已知的正确状态。
答案 2 :(得分:1)
数据库通常在更新时写入日志。然后它可以告诉它没有设法作为一个事务完成其操作并使用日志来回滚更改。