尝试....在mysql中捕获事务?

Mic*_*lps 11 mysql sql

如果SQL语句中有任何错误,系统将自动回滚更改,如何启动事务?

交易MySQL

PHP + MySQL事务示例

用PHP

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();

    // A set of queries; if one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');

    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (Exception $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
}
Run Code Online (Sandbox Code Playgroud)

如何在没有PHP的情况下重复逻辑,只有MYSQL

Rak*_*oni 9

您可以将多个查询写入MySQL过程/函数,并且可以像下面给出的示例一样维护事务.基本上,您声明一个将调用rollback的错误处理程序.

PROCEDURE `myprocedure`()
BEGIN

.. Declare statements ..

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN
      .. set any flags etc  eg. SET @flag = 0; ..
      ROLLBACK;
END;

START TRANSACTION;

    .. Query 1 ..
    .. Query 2 ..
    .. Query 3 ..

COMMIT;
.. eg. SET @flag = 1; ..

END
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅以下链接

MySQL:存储过程中的事务

如何在MySQL存储过程中使用事务?


Dik*_*nia -11

这是我最后一篇与 SQL 事务相关的工作,也许下面的代码示例可以帮助你。该代码是为MS SQL 服务器开发的。请注意,您不能在 MySQL 服务器中使用它,因为 MySQL 没有该功能。

主要思想是将主查询(可以多个)放在“try”和“transaction”子句中,然后如果查询执行成功,则查询将被提交到数据库中,否则如果失败,在事务完全回滚之前,“catch”部分将引发错误。

BEGIN TRY
    BEGIN TRANSACTION
        --Insert Your Queries Here--
    COMMIT
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();


    IF @@TRANCOUNT > 0
    ROLLBACK 

    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );

END CATCH
Run Code Online (Sandbox Code Playgroud)

  • 这没有用,因为问题要求在 mysql 中进行 try/catch。 (6认同)