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

mysql транзакция - връщане назад при всяко изключение

Можете да използвате 13.6.7.2. DECLARE ... Синтаксис на HANDLER по следния начин:

DELIMITER $$

CREATE PROCEDURE `sp_fail`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO `tablea` (`date`) VALUES (NOW());
    INSERT INTO `tableb` (`date`) VALUES (NOW());
    INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;

За пълен пример проверете следната SQL Fiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вложени класове - CustomRowMapper !! Вече не е проблем!! - Част 2

  2. Как да извлечем първия и последния запис на групиран запис в MySQL заявка с агрегатни функции?

  3. Как мога да вмъкна много редове в MySQL таблица и да върна новите идентификатори?

  4. Какво означава да избягаш от низ?

  5. Фатална грешка:Неуловено изключение „mysqli_sql_exception“ със съобщение „Не е използван индекс в заявката/подготвеното изявление“