MYSQLストレージ中のトランザクションとDECLARE EXIT/CONTINITUE HANDLERの使用

3175 ワード

1、DECLARE EXIT HANDLER FOR SQLEXCEPTION文の後にbegin endの複合文ブロックを付けることもできるし、簡単な文を直接付けることもできる.例えば、DECLARE EXIT HANDLER FOR SQLEXCEPTION v_succ=0;2、EXITは異常を実行した後にFOR SQLEXCEPTIONを実行した後の文またはブロックを実行して全体的に停止する.CONTINEオプションは、例外後も実行され、id 2のレコードがデータベースに書き込まれます.3、トランザクションではcreate tableなどの暗黙的なトランザクションのコミットを実行するコマンドは使用しないでください.そうしないと、ロールバック操作ではなく暗黙的なトランザクションのコミットが発生します.
DROP PROCEDURE IF EXISTS p_test;
delimiter //
CREATE PROCEDURE p_test(OUT v_succ tinyint)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN
  --
  ROLLBACK;
END;
SET v_succ=0;
START TRANSACTION;
--        insert  ,      create table  ,         create table       
  INSERT INTO tb_test (id) VALUES (1);
  SIGNAL SQLSTATE '45001' SET MYSQL_ERRNO=2000,MESSAGE_TEXT='      ';
  INSERT INTO tb_test (id) VALUES (2);
COMMIT;
SET v_succ=1;
END;//
delimiter ;

 
転載先:https://www.cnblogs.com/sdlz/p/8901697.html