所以我正在制作一个php网站,有时需要管理员类型的用户输入大数据。这种情况并不常见,只会在更新或向数据库添加某些数据时发生。
在这段可能需要一两分钟的上传时间内,我不能让其他用户像往常一样提取数据并进行操作,因为这可能会导致一些重大错误。
一种解决方案是停止服务器一段时间,并将网站置于维护之下,供管理员类型的用户在本地上传数据。
然而,网站上一次的用户数量永远不会超过1-2个,而且这些更新时间很短(1-2分钟(,而且不频繁。这使得这种情况非常不可能发生,但仍然有可能发生。
我想在User表中创建一些条目,管理员可以在更新前后切换,并且我的代码会在每次用户数据操作之前进行检查。然后,如果用户在该值打开的情况下尝试保存,他们将有一个弹出窗口或告诉他们等待几分钟的东西。
这样可以吗?有更好的方法吗?
有一种方法可以锁定一个表,以便成为该表的唯一用户。
其中包括读锁和写锁,但在这种情况下,写锁可能是解决方案。
WRITE锁具有以下功能:
- 唯一持有表锁的会话可以从表中读取和写入数据
- 在释放write锁之前,其他会话无法从表中读取数据,也无法向表中写入数据
要在mysql中锁定表,只需使用:
LOCK TABLE table_name WRITE;
如果需要多个表,只需添加逗号即可:
LOCK TABLES table_name1 WRITE,
table_name2 WRITE,
... ;
查询完成后,您可以简单地使用UNLOCK TABLES;
来解锁表。
访问https://www.mysqltutorial.org/mysql-table-locking/有关mysql表锁定的更完整教程。