当人们尝试访问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/