$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钱?如果是,我该如何避免?
谢谢。
答案 0 :(得分:4)
如果您担心同时运行的两个查询负责数据库中的不平衡状态,您应该使用事务:http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html
事务有助于保持数据状态的正确性。
答案 1 :(得分:1)
您可以在LOCK TABLE table WRITE
之前和UNLOCK TABLE table
之后查询。
答案 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