锁定MySQL数据库,以便一次只能有一个人运行查询?

Gar*_*hby 5 php mysql concurrency

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

我有一个使用PHP编写的网页.在此网页中是一个查询,以检查是否已将某些数据输入数据库.如果数据没有,那么我继续插入它.麻烦的是,如果两个人同时尝试,检查可能会说数据还没有输入,但是当插入发生时,它已经由另一个人进行.

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

Jas*_*n S 5

阅读数据库事务.这可能是比运行LOCK TABLES更好的处理你需要的方法.


Ros*_*oss 2

您正在寻找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;
Run Code Online (Sandbox Code Playgroud)

或者在 PHP 中:

mysql_query('LOCK TABLES items');
mysql_query("INSERT INTO items (name, label) VALUES ('foo', 'bar')");
mysql_query('UNLOCK TABLES');
Run Code Online (Sandbox Code Playgroud)