0

在数据库事务中运行整个 php 应用程序的理论和实际缺点是什么,以确保脚本中导致的任何意外错误或异常都会恢复数据库中所做的每一个更改,从而避免由于未完成脚本而导致的状态有些表已更新,有些则没有?这显然不是也不会被推荐为好的做法,但我想详细了解原因。

4

1 回答 1

2

数据库事务确保多个操作遵守 ACID 属性:

  • 原子的-这是您在问题中提到的属性,即事务中的每个操作都成功或全部失败;

  • 一致——这个属性确保数据库状态在任何时候都是有效的;

  • 隔离- 此属性确保并发事务(即来自不同连接)的发生就像它们是串行执行的一样;和

  • 持久- 一旦提交,更改是永久性的。

为了确保Isolation的第三个属性,像 MySQL 这样的 RDBMS 系统执行锁定以确保,例如,一个事务不写入记录而另一个正在读取记录(当记录被锁定时,其他事务必须等待在他们能够继续之前释放锁)。

如果您的事务不必要地过长,它们将导致过度锁定和过度等待。它甚至可能导致不必要的死锁,即事务正在等待彼此持有的锁,并且在至少一个回滚之前无法继续。

出于性能(和持久性)的原因,因此您应该努力将事务保持在保持一致性绝对必要的程度。

于 2012-06-06T13:55:04.383 回答