如何在查询发生时“关闭”数据库?

时间:2011-04-12 15:37:59

标签: php mysql

$database->count = "SELECT * FROM table WHERE item_id = 1"

if($database->count == 1)
{
   $database->update = "UPDATE users SET money = money - 1000";
   $database->delete = "DELETE table WHERE item_id = 1";
}

假设我在index.php页面中有这个代码(我刚创建它)。可以同时"SELECT * FROM table WHERE item_id = 1"查询,这样两个人会得到1和-1000钱?如果是,我该如何避免?

谢谢。

5 个答案:

答案 0 :(得分:4)

如果您担心同时运行的两个查询负责数据库中的不平衡状态,您应该使用事务:http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

事务有助于保持数据状态的正确性。

答案 1 :(得分:1)

您可以在LOCK TABLE table WRITE之前和UNLOCK TABLE table之后查询。

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

答案 2 :(得分:1)

您需要transactions

答案 3 :(得分:1)

如果您使用的是InnoDB,则可以使用事务隔离级别,以便不允许脏读。确保使用可重复读取作为事务隔离级别。

BTW DELETE行应该说DELETE FROM表WHERE item_id = 1;

答案 4 :(得分:0)

并非所有数据库都具有事务支持,因此如果您在使用PHP时使用mysql,那么您将需要表锁定技术。 除非您完成所有工作,否则您的表将被锁定,您也可以指定行锁定。

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

最佳:) Waqar Alamgir