首页 > 解决方案 > 如何在一段时间内停止所有当前用户的数据库输入

问题描述

所以我正在制作一个有时需要管理员类型用户输入大数据的 php 网站。这不会经常发生,只会发生在数据库中更新或添加某些数据。

在这个可能需要一两分钟的上传时间期间,我不能让其他用户像他们通常那样尝试提取数据并对其进行操作,因为这可能会导致一些重大错误。

一种解决方案是停止服务器一段时间并将站点置于维护状态,以便管理员类型的用户在本地上传数据。

但是,站点上一次不会有超过 1-2 个用户,并且这些更新很短(1-2 分钟)且不频繁。这使得这种情况非常不可能,但仍有可能。

我正在考虑在用户表中创建某种条目,管理员可以在更新前后切换,并且我的代码将在每次用户数据操作之前检查。然后,如果用户在该值打开时尝试保存,他们只会有一个弹出窗口或告诉他们等待几分钟的东西。

这样可以吗?有没有更好的方法来解决这个问题?

标签: phpmysqlsqlvalidation

解决方案


有一种锁定表的方法,以便成为该表的唯一用户。

包括 READ 锁和 WRITE 锁,但在这种情况下,WRITE 锁可能是解决方案。

WRITE 锁具有以下特性:

  1. 唯一持有表锁的会话可以从表中读取和写入数据。
  2. 在释放 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 表锁定教程。


推荐阅读