代码之家  ›  专栏  ›  技术社区  ›  sharkin

数据库事务损坏时是否存在断点?

  •  4
  • sharkin  · 技术社区  · 16 年前

    我感兴趣的是数据库事务“通常”是如何在数据库系统中实现的,比如MySQL。

    假设将数据写入物理数据库存储的实际操作不是原子操作(现在用时钟周期来表示),我难道不应该通过在某个精心选择的时刻撕开电源线来破坏事务吗?

    3 回复  |  直到 16 年前
        1
  •  6
  •   Martin v. Löwis    16 年前

    如果仔细编写数据库系统,那么就不应该存在断电会损坏数据的时间点,并且当断电发生时,提交的数据不应该丢失。

    rdbms在实际更新数据之前首先将数据写入事务日志。崩溃后,它会重放日志,将任何挂起的更改从日志复制到数据库中,并回滚日志中尚未完成的任何事务。只有在硬盘向日志报告已完成的写入操作后,提交才会报告为成功。

        2
  •  2
  •   Ben S    16 年前

    数据库遵循 ACID

        3
  •  1
  •   Davy    16 年前

    数据库在更新时写入日志是很常见的。然后,它可以告诉您它没有成功地将其操作作为一个事务完成,并使用日志回滚更改。