在同一字段上组合两个UPDATE查询但具有不同的值

时间:2013-05-11 13:05:51

标签: mysql

我目前有两个使用PDO / MySQL的查询:

$sql = "UPDATE permissions SET valid = 'N' WHERE perm_desc = :perm_desc";
$sth = $this->db->prepare($sql);
$sth->bindParam(':perm_desc', $perm_desc);

$sql2 = "UPDATE role_perm SET valid = 'N' WHERE perm_id = :perm_id";
$sth2 = $this->db->prepare($sql2);
$sth2->bindParam(':perm_id', $perm_id);

我想知道将这些结合起来是否更有意义:

$sql = "UPDATE permissions, role_perm
        SET permissions.valid = 'N', role_perm.valid = 'N'
        WHERE permissions.perm_desc = :perm_desc AND role_perm.perm_id = :perm_id";

我无法绕着JOIN缠绕我的脑袋,有些人说他们的速度更快,而其他人则认为速度较慢。什么是最好的解决方案?

1 个答案:

答案 0 :(得分:0)

使用当前的两种不同更新方法,您必须处理第二次更新失败的情况,并手动回滚第一次更新。如果您依赖开放式事务来处理失败,那么您将在数据库中打开一个比所需时间更长的事务。

但毕竟,这取决于你的要求。如果您需要同时执行这两个更新(如果第二个更新失败则回滚),那么我宁愿选择sentence方法。通过这种方式,您可以从交易中受益。