首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁定MySQL数据库,以便一次只有一个人可以运行查询?

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

Stack Overflow用户
提问于 2009-01-14 17:27:53
回答 4查看 8.1K关注 0票数 5

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

我有一个用PHP编写的网页。此网页中有一个查询,用于检查是否已将某些数据输入到数据库中。如果数据还没有,我就继续插入它。问题是,如果两个人同时尝试,检查可能会说数据还没有输入,但当插入发生时,它已经由另一个人输入了。

处理这种情况的最佳方法是什么?我是否可以将数据库锁定为只处理我的查询,然后再处理其他查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-14 17:30:27

你在找LOCK。

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

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

我想说的是,最好锁定需要锁定的特定表(尽管您可能会尝试使用LOCK TABLES *),而不是锁定整个数据库-因为没有任何东西能够被读取。我认为你在寻找类似这样的东西:

代码语言:javascript
复制
LOCK TABLES items;
START TRANSACTION;
INSERT INTO items (name, label) VALUES ('foo', 'bar');
UNLOCK TABLES;

或者在PHP中:

代码语言:javascript
复制
mysql_query('LOCK TABLES items');
mysql_query("INSERT INTO items (name, label) VALUES ('foo', 'bar')");
mysql_query('UNLOCK TABLES');
票数 2
EN

Stack Overflow用户

发布于 2009-01-14 17:36:42

阅读database transactions上的内容。与运行锁表相比,这可能是一种更好的处理所需内容的方法。

票数 5
EN

Stack Overflow用户

发布于 2009-01-14 21:46:08

手动锁定表是你所能做的最糟糕的事情。如果解锁它们的代码从未运行(因为PHP失败,或者用户下一步单击下一步,离开PC等),会发生什么情况?

在web应用中最小化这一点的一种方法,也是开发人员经常犯的一个错误,就是让一个充满要编辑的数据文本框的数据网格,每行或整个表上都有一个保存按钮。显然,如果这个人在周五打开它,然后在周一回来,数据可能是错误的,他们可能会保存新的数据。解决这个问题的一个简单方法是在每一行上都有编辑按钮,然后单击按钮加载一个编辑表单,这样他们就有希望加载新的数据,并且一次只能提交一行更改。

但更重要的是,您应该包含一个datetime字段作为隐藏的输入框,当他们尝试提交数据时,请查看日期并确定数据有多旧,并决定多旧是太旧,并警告或拒绝用户的操作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/443909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档