php - 如何在一段时间内停止所有当前用户的数据库输入
问题描述
所以我正在制作一个有时需要管理员类型用户输入大数据的 php 网站。这不会经常发生,只会发生在数据库中更新或添加某些数据。
在这个可能需要一两分钟的上传时间期间,我不能让其他用户像他们通常那样尝试提取数据并对其进行操作,因为这可能会导致一些重大错误。
一种解决方案是停止服务器一段时间并将站点置于维护状态,以便管理员类型的用户在本地上传数据。
但是,站点上一次不会有超过 1-2 个用户,并且这些更新很短(1-2 分钟)且不频繁。这使得这种情况非常不可能,但仍有可能。
我正在考虑在用户表中创建某种条目,管理员可以在更新前后切换,并且我的代码将在每次用户数据操作之前检查。然后,如果用户在该值打开时尝试保存,他们只会有一个弹出窗口或告诉他们等待几分钟的东西。
这样可以吗?有没有更好的方法来解决这个问题?
解决方案
有一种锁定表的方法,以便成为该表的唯一用户。
包括 READ 锁和 WRITE 锁,但在这种情况下,WRITE 锁可能是解决方案。
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 表锁定教程。
推荐阅读
- javascript - 当我在一个函数中创建元素时,当我 getElementById 时会导致错误
- python - 试图删除在另一个函数中找到索引的列表元素
- javascript - 流畅的ffmpeg没有同步运行
- python - 这种多重继承有什么问题?
- python - Matplotlib 表格布局问题
- arrays - Golang 最佳实践:空数组响应或错误?
- php - 使用 php OOP 检查空输入验证的类
- c# - EFCore 3 GroupBy+ToDictionary 引发客户端 GroupBy 不支持
- c# - 将 InputAccessoryView 设置为 UISearchController
- list - 如何获取 Kotlin 列表中倒数第二个项目?