我在这里遇到的问题是,我不想在PHP脚本的开头锁定mysql表以获得明显的性能提升。我只想在肯定需要写表的时候实现锁定。例如,也许我需要更新帐户余额。
但是问题是,如果我需要将一些数字记入帐户余额字段中时锁定该点,并且在进行锁定和更新之前已经有另一个连接已经从该表中读取了该行,该怎么办?是的,其他连接必须等到我完成后才能执行表中的其他任何操作。但是该其他连接已经具有旧数据(这可能是错误的帐户余额),并且它所做的任何写操作都意味着它使用了不正确的旧余额。让我们假设它想在旧余额上加1。应该将此1添加到最新余额中。
但是第一个连接更改了帐户余额,而第二个连接将执行相同操作,从而导致不良结果。
仅当我确定要执行写操作或必须在脚本开始时完全实现表锁定才能避免这种竞争情况时,才可以使用此锁定的替代方法。