假设我对我的数据库中的一个表有大约 1000 个同时请求,该表由这些语句组成(按顺序):
SELECT
INSERT or UPDATE (could be multiple)
DELETE
我想确保没有任何请求相互干扰,并且表处于下一个传入请求的更新状态。例如:
Request #1 comes in.
Request #2 comes in.
Request #1 starts to get processed.
Request #2 should start only when Request #1 is processed so that the data view is consistent and updated for the next request.
我在网上搜索了这种情况,发现了两件事可能会有所帮助:
交易
表锁定
但是当我阅读事务时,我发现当一个事务正在处理一行时,其他事务仍然可以出现并修改该行,这违背了我的目的。
同样在锁定的情况下,只能将列锁定在一种模式下,即读取或写入模式,这再次无法保持数据一致,因为在读取行时它可能会被更新并且刚刚读取的数据将成为旧版本的表实际上是现在。
有没有一种可靠的方法来实现这一点,可以确保没有请求干扰另一个请求,并且表处于下一个传入请求的更新状态?
如果这有帮助,我正在将 MySQL 与 PHP 一起使用。