当人们尝试访问MySQL数据库并且他们尝试使用相同的信息更新表时,我遇到了一些问题。

我有一个使用PHP编写的网页。在此网页中的查询用于检查是否已将某些数据输入到数据库中。如果没有数据,那么我将其插入。麻烦的是,如果两个人同时尝试,检查可能会说尚未输入数据,但是插入时却是另一个人输入的。

处理这种情况的最佳方法是什么?我可以锁定数据库以仅先处理我的查询然后再处理其他查询吗?

最佳答案

您正在寻找LOCK

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

这可以作为简单的mysql_query(或MySQLi::query/prepare)运行。

我会说最好锁定需要锁定的特定表(尽管您可以尝试LOCK TABLES *),而不是锁定整个数据库-因为将无法读取任何内容。我认为您正在寻找类似的东西:

LOCK TABLES items;
START TRANSACTION;
INSERT INTO items (name, label) VALUES ('foo', 'bar');
UNLOCK TABLES;

或在PHP中:
mysql_query('LOCK TABLES items');
mysql_query("INSERT INTO items (name, label) VALUES ('foo', 'bar')");
mysql_query('UNLOCK TABLES');

关于php - 锁定一个MySQL数据库,以便一次只有一个人可以运行查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/443909/

10-11 03:31
查看更多