有没有办法加快这个mysql?

时间:2011-12-08 22:48:29

标签: mysql pdo

我的代码,

$dbc -> beginTransaction();
$dbc -> query("LOCK TABLES items WHERE id = " . $user['id'] . " WRITE");
$q = $dbc -> prepare("UPDATE items SET shrapnel = ?, bank = ? WHERE id = ?");
$q -> execute(array($user['shrapnel'] - $_POST['deposit'], $user['bank'] + $_POST['deposit'], $user['id']));
$dbc -> query("UNLOCK TABLES items WHERE id = " . $user['id'] . "");
$dbc -> commit();

非常简单,需要确保没有其他人可以读取或写入表中用户行的值。如果出现问题,还需要确保它回滚!

如果我没有明确回滚并且某些内容失败,那么更改将不会发生?

这是确保在提交此声明时确保没有其他用户能够读取或更新这些值以避免完全灾难的可靠方法吗?

我正在使用支持行级锁定的InnoDB。

1 个答案:

答案 0 :(得分:2)

你不能像那样锁定表格的一部分。您可以使用LOCK TABLES

锁定表格

要锁定某些行以便将FOR UPDATE添加到您的SELECT,请执行以下操作:

$dbc -> query("SELECT * FROM items WHERE id = " . $user['id'] . " FOR UPDATE");

不要执行UNLOCK TABLES,只提交或回滚事务,锁定将被释放。