虽然MYSQL的异常处理不是很完善

2019-12-12 16:52栏目:b888计算机
TAG:

MySQL 5.5新扩张SIGNAL十分管理

 

MySQL 从 5.0 开始支持存款和储蓄进度,到今日流行版本5.5 已经好些个少个新禧了。 即便MYSQL的十分管理不是很周密,但是管理大非常多的应用如故丰富了。

  www.2cto.com  

丰裕管理的语句好似下二种:

  1. DECLARE ... CONDITION.

  2. DECLARE ... HANDLER.

  3. RESIGNAL.

  4. SIGNAL.

 

首先种,名称叫规范注解。

DECLARE condition_name CONDITION FOR condition_value

 

这里condition_name 为专门的学问的变量命名, condition_value 为SQLSTATE 值 或者 MySQL 自身的ERROR CODE.

单独的condition 语句无法直接运营。 只好作为第三种的黄金年代部分。

  www.2cto.com  

其次种, 名字为准则管理。

首先种证明好了,接下去本来要做相应的管理。

DECLARE handler_action HANDLER

    FOR condition_value [, condition_value] ...

    statement

 

handler_action:

    CONTINUE

  | EXIT

  | UNDO

 

condition_value:

    mysql_error_code

  | SQLSTATE [VALUE] sqlstate_value

  | condition_name

  | SQLWARNING

  | NOT FOUND

  | SQLEXCEPTION

 

handler_action 代表拍卖的动作,最近进之有效的有二种, 继续和直接退出。

condition_value 有几许种,个中囊括前边条件注脚里的SQLSTATE, MYSQL EEROR CODE, condition_name 以致范围模糊的别样二种

SQLWALANDNING,SQLEXCEPTION. NOT FOUND表示别的不设有的WATiguanNING可能ETiguanROHaval。

 

其三种, 代表伪装系统的错误音信以至代码,刷新当前告诫缓冲区域。

RESIGNAL [condition_value]

    [SET signal_information_item

    [, signal_information_item] ...]

 

condition_value:

    SQLSTATE [VALUE] sqlstate_value

  | condition_name

 

signal_information_item:

    condition_information_item_name = simple_value_specification

 

condition_information_item_name:

    CLASS_ORIGIN

  | SUBCLASS_ORIGIN

  | MESSAGE_TEXT

  | MYSQL_ERRNO

  | CONSTRAINT_CATALOG

  | CONSTRAINT_SCHEMA

  | CONSTRAINT_NAME

  | CATALOG_NAME

  | SCHEMA_NAME

  | TABLE_NAME

  | COLUMN_NAME

  | CURSOR_NAME

 

特别注意的是能够装作的切实可行事物重重,包含错误代码(MYSQL本身的东东),错误内容,错误的数目库名,表名,列名等等。

 

第三种,SIGNAL和RESIGNAL差异超级小,大家记住signal 无法独立运维,resignal能够独自运转。

SIGNAL condition_value

    [SET signal_information_item

    [, signal_information_item] ...]

 

condition_value:

    SQLSTATE [VALUE] sqlstate_value

  | condition_name

 

signal_information_item:

    condition_information_item_name = simple_value_specification

 

condition_information_item_name:

    CLASS_ORIGIN

  | SUBCLASS_ORIGIN

  | MESSAGE_TEXT

  | MYSQL_ERRNO

  | CONSTRAINT_CATALOG

  | CONSTRAINT_SCHEMA

  | CONSTRAINT_NAME

  | CATALOG_NAME

  | SCHEMA_NAME

  | TABLE_NAME

  | COLUMN_NAME

  | CURSOR_NAME

 

笔者们以后给多少个例证。

 

不用RESIGNAL/SIGNAL。

[sql] 

DELIMITER $$  

  

USE `t_girl`$$  

  

DROP PROCEDURE IF EXISTS `sp_signal1`$$  

  

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_signal1`(  

    IN f_id INT  

    )  

BEGIN  

      DECLARE con1 TINYINT DEFAULT 0;  

      DECLARE con1 CONDITION FOR SQLSTATE '23000';  

      DECLARE CONTINUE HANDLER FOR con1  

      BEGIN  

        SELECT 'Error Code : 22rnDuplicated!';  

      END;  

      INSERT INTO user_info VALUES (f_id);  

    END$$  

  

DELIMITER ;  

 

CALL sp_signal1(12);

 

query result

 

result

Error Code : 22

Duplicated!

 

用RESIGNAL/SIGNAL 重刷当前错误确诊区域。

 

[sql] 

DELIMITER $$  

  

    www.2cto.com  

USE `t_girl`$$  

  

  

DROP PROCEDURE IF EXISTS `sp_signal1`$$  

  

  

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_signal1`(  

    IN f_id INT  

    )  

BEGIN  

      DECLARE con1 TINYINT DEFAULT 0;  

      DECLARE con1 CONDITION FOR SQLSTATE '23000';  

      DECLARE CONTINUE HANDLER FOR con1  

      BEGIN  

        resignal SET schema_name = 'action',   

             table_name = 'action_tb',   

             message_text = 'Duplicated!',  

                     mysql_errno = 22;  

/*         

    signal con1 SET schema_name = 'action',   

             table_name = 'action_tb',   

             message_text = 'Duplicated!',  

                     mysql_errno = 22;  

    www.2cto.com  

  

*/  

      END;  

      INSERT INTO user_info VALUES (f_id);  

    END$$  

  

DELIMITER ;  

 

CALL sp_signal1(12);

  www.2cto.com  

Query : call sp_signal1(12)

Error Code : 22

Duplicated!

Execution Time : 00:00:00:000

Transfer Time  : 00:00:00:000

Total Time     : 00:00:00:000

 

 

作者 四爷

5.5新添SIGNAL至极管理 MySQL 从 5.0 初叶援助存款和储蓄进度,到明天风行版本5.5 已经相当多少个年头了。 即便MYSQL的不行管理不是很完美,可是管理...

版权声明:本文由b888博一-sbf老虎机发布于b888计算机,转载请注明出处:虽然MYSQL的异常处理不是很完善