mysql - 如何检查和回滚 mySql 查询

我有一个关于我使用 PHP 进行的 mySql 查询的问题 -


在我的代码中,我将数据插入表 - main_query 。如果插入部分想要好,我会执行第二个插入查询 - sub_query。


如果第二个插入查询失败,如何取消第一个插入查询?我的意思是 - 是否可以在实际执行之前发送两个查询以进行检查?或者 - 是否可以回滚第一个“main_query”查询?


$main_query = "INSERT INTO table_1 (...) VALUES (...)";

$res = $conn->query($main_query);


if ($res)

{

    $id = mysqli_insert_id($conn);

    

    $sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here

    $res = $conn->query($sub_query);

}


温温酱
浏览 107回答 1
1回答

慕森王

在这种情况下,您需要使用事务和回滚:# start mysql transactionmysqli_begin_transaction($conn, MYSQLI_TRANS_START_READ_WRITE);$main_query = "INSERT INTO table_1 (...) VALUES (...)";$res = mysqli_query($conn, $main_query);if ($res){    $id = mysqli_insert_id($conn);        $sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here    $res = mysqli_query($conn, $sub_query);    if ($res) {        # both inserts succeed - do commit        mysqli_commit($conn);    }    else {        # second insert fail - do rollback        mysqli_rollback($conn);     }} else  {    # first insert fail - do rollback    mysqli_rollback($conn); }或者我们可以使用面向对象的风格,例如:# start mysql transaction$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);$main_query = "INSERT INTO table_1 (...) VALUES (...)";$res = $mysqli->query($main_query);if ($res){    $id = $mysqli->insert_id;    $sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here    $res = $mysqli->query($sub_query);    if ($res) {        # both inserts succeed - do commit        $mysqli->commit();    }    else {        # second insert fail - do rollback        $mysqli->rollback();     }} else  {    # first insert fail - do rollback    $mysqli->rollback(); }在这里查看工作示例PHPize.online
打开App,查看更多内容
随时随地看视频慕课网APP