sql >> Database teknologi >  >> RDS >> Mysql

MySQL transaktions gåde

MySQL sender fejlkode til den, der ringer, og baseret på denne fejlkode kan den, der ringer, frit beslutte, om den ønsker at udføre arbejde, der er udført indtil nu (ignorerer fejlen med denne særlige INSERT erklæring) eller for at tilbageføre transaktionen.

Dette er i modsætning til PostgreSQL som altid afbryder transaktionen ved fejl, og denne adfærd er en kilde til mange problemer.

Opdatering:

Det er en dårlig praksis at bruge en ubetinget ROLLBACK inde i de lagrede procedurer.

Lagrede procedurer kan stables, og transaktioner kan ikke, så en ROLLBACK i en indlejret lagret procedure vil rulle tilbage til begyndelsen af ​​transaktionen, ikke til tilstanden for udførelse af den lagrede procedure.

Hvis du vil bruge transaktioner til at gendanne databasetilstanden ved fejl, skal du bruge SAVEPOINT konstruktioner og DECLARE HANDLER for at rulle tilbage til lagringspunkterne:

CREATE PROCEDURE prc_work()
BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK TO sp_prc_work;
        SAVEPOINT sp_prc_work;
        INSERT  …;
        INSERT  …;
        …
END;

Fejl i en af ​​indsætningerne vil rulle alle ændringer foretaget af proceduren tilbage og afslutte den.



  1. hvordan man indstiller standardværdi for teksttype i mysql

  2. Hvordan NOT RLIKE virker i MySQL

  3. ORA-00972-id er for langt aliaskolonnenavn

  4. Tidsstempel for rækkeoprettelse og sidste ændring