2015-06-22 10 views
5

Jak rozpocząć transakcję, gdy wystąpi błąd w instrukcjach SQL, system automatycznie wycofa zmiany?spróbuj .... catch w mysql dla transakcji?

Transaction MySQL

PHP + MySQL transactions examples

w 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(); 
} 

Jak powtórzyć logikę bez PHP, tylko MYSQL

Odpowiedz

2

To moja ostatnia praca związana z transakcją w sql, może Poniższy przykładowy kod może ci pomóc. Kod został opracowany dla serwera MS SQL i możesz potrzebować go nieco zmienić na serwerze MySQL.

Głównym pomysłem jest umieszczenie głównej kwerendy (która może być więcej niż jedną) w klauzulach "try" i "transaction", a następnie, jeśli zapytanie zostanie wykonane pomyślnie, dlatego zapytanie zostanie zatwierdzone w bazie danych, w przeciwnym razie W przypadku niepowodzenia, błąd zostanie zgłoszony w sekcji "catch", zanim transakcja zostanie całkowicie wycofana.

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 
0

Można napisać wiele zapytań do procedury MySQL/funkcji i może utrzymać transakcji jak z próbką podanej poniżej. Zasadniczo deklarujesz procedurę obsługi błędów, która wywoła funkcję przywracania.

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 

proszę zobaczyć linki poniżej więcej szczegółów

MySQL : transaction within a stored procedure

How can I use transactions in my MySQL stored procedure?

Powiązane problemy