mysql的异常处理以及回滚的有关问题

mysql的异常处理以及回滚的有关问题

mysql的错误处理以及回滚的问题

代码如下:

SQL code


  
DELIMITER $$

CREATE PROCEDURE sp_test(OUT errcode1 INT,OUT errcode2 INT)
sp_test_l:
    BEGIN
    DECLARE CONTINUE HANDLER FOR 1452 SELECT 'Foreign key error';
    START TRANSACTION;
    SET errcode1=@@error_count;
    INSERT INTO acct_access_log (accountno,al_type,al_time,al_address,al_session) VALUES
            ('RCT01',0,CURRENT_TIMESTAMP,'192.168.101.171','123456789');
    
    INSERT INTO acct_access_log (accountno,al_type,al_time,al_address,al_session) VALUES
            (123,0,CURRENT_TIMESTAMP,'192.168.101.171','123456789');
    IF @@error_count<>0 THEN
        SET errcode2=1;
                   rollback;
                   leave sp_test_l;
    END IF;
    COMMIT;
    END sp_test_l$$

DELIMITER ;

上面的代码第二个insert是会因为外键的原因而失败的

我想在第二个insert之后检测错误,如果有任何错误(包含因外键导致的不一致以及其他可能未知的问题),则回滚




如果有任何错误 @@error_count 都不是0

所以你的代码都回滚




直接在HANDLER中ROLLBACK就行了。

SQL code

mysql> create table t_cqlxm (
    ->  id int primary key,
    ->  c int
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> DELIMITER $$
mysql> CREATE PROCEDURE sp_cqlxm()
    -> BEGIN
    ->  DECLARE CONTINUE HANDLER FOR 1062 rollback ;
    ->  START TRANSACTION;
    ->  insert into     t_cqlxm values (1,1);
    ->  insert into     t_cqlxm values (1,1);
    ->
    ->  COMMIT;
    -> END
    -> $$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> call sp_cqlxm();
Query OK, 0 rows affected (0.05 sec)

mysql> select * from t_cqlxm;
Empty set (0.00 sec)

mysql>


                        
  
  
                    
mysql的异常处理以及回滚的有关问题

相关文章:

你感兴趣的文章:

标签云: