Mysql
 sql >> база данни >  >> RDS >> Mysql

Загадка за транзакциите на MySQL

MySQL предава код за грешка на обаждащия се и въз основа на този код за грешка обаждащият се е свободен да реши дали иска да поеме извършена работа до момента (игнорирайки грешката с този конкретен INSERT изявление) или за връщане на транзакцията.

Това е за разлика от PostgreSQL което винаги прекъсва транзакцията при грешка и това поведение е източник на много проблеми.

Актуализация:

Лоша практика е да използвате безусловен ROLLBACK вътре в съхранените процедури.

Съхранените процедури могат да се подреждат, а транзакциите не, така че ROLLBACK в рамките на вложена съхранена процедура ще се върне обратно до самото начало на транзакцията, а не до състоянието на изпълнение на съхранената процедура.

Ако искате да използвате транзакции за възстановяване на състоянието на базата данни при грешки, използвайте SAVEPOINT конструкции и DECLARE HANDLER за връщане към точките за запис:

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

Неуспехът в което и да е вмъкване ще отмени всички промени, направени от процедурата, и ще излезе от нея.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Вмъкване на формуляр в база данни

  2. Как да актуализирате автоматично данни в базата данни в PHP

  3. NodeJS не можа да се свърже с последната версия на MYSQL в Docker Container

  4. MySQL min/max за тип DOUBLE

  5. Извличане на всички имена на таблици, имена на колони и стойности на колони от конкретна база данни