如果一个失败,则回滚多个更新查询

Aci*_*oud 5 php mysql

所以我正在做的是有多个UPDATE查询,这会更改tbl_groups表中的组名,然后更新tbl_users属于该组的所有用户,但如果用户更新查询失败,它会更新组,但我想更新两个使用PHP和MySQL一起使用或不使用.

But*_*kus 2

听起来您所需要做的就是使用交易。

必须使用InnoDB表才能使用事务(实际上,其他一些DB引擎也有事务,但InnoDB以MySQL最常见)。

在第一次更新之前发出“BEGIN TRANSACTION”查询。

如果任何查询失败,请发出“ROLLBACK”查询以撤消所有操作。

这真的很简单。

如果您决定要进行部分回滚(返回到事务开始后的某个点),那么您可以使用“ROLLBACK TO SAVEPOINT savepoint_name”。您必须首先发出“SAVEPOINT savepoint_name”查询。

例如,在 PHP 中

mysql_query("BEGIN TRANSACTION");

$result1 = mysql_query("UPDATE `tbl_groups` SET `user_id` = 5 WHERE `group_id` = 3");
if($result1 === false) {
mysql_query("ROLLBACK");
}

mysql_query("SAVEPOINT savepoint1");

$result2 = mysql_query("UPDATE `tbl_users` SET `group_id` = 3 WHERE `user_id` = 5");

if($result === false) {
ROLLBACK TO SAVEPOINT savepoint1;
}
// COMMIT saves the changes to the db, making them visible to other sessions
// if the ROLLBACK TO SAVEPOINT statement executed, then only changes up to that SAVEPOINT will be saved
// if no ROLLBACK statements were executed, then all changes will be saved (assuming no MySQL errors that cause implicit ROLLBACK)
mysql_query('COMMIT');
Run Code Online (Sandbox Code Playgroud)