数据库
首页 > 数据库> > MySQL十八:异常处理

MySQL十八:异常处理

作者:互联网

异常处理

一、定义条件

  1. 定义

    事先定义程序执行过程中可能遇到的问题,给MySQL中的错误码命名

  2. 错误码

    数值型错误码:MySQL_error_code

    字符串型错误码:sqlstate_value

  3. 语法格式
    DECLARE 自定义错误名称 CONDITION FOR 错误码(错误条件);
    
    # 举例
    DECLARE Field_Not_Be_NULL CONDITION FOR 1048;
    DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE '23000';
    

二、处理程序

  1. 定义

    定义在遇到问题时应当采取的处理方式,并保证存储过程或函数在遇到警告或错误时能继续执行,避免程序异常停止运行。

  2. 语法格式
    DECLARE 处理方式 HANDLER FOR 错误类型 处理语句;
    
  3. 处理方式

    CONTINUE:遇到错误不处理,继续执行

    EXIT:遇到错误后退出

    ③ UNDO:遇到错误撤回之前操作,MySQL不支持

  4. 错误类型

    SQLSTATE:字符串型错误代码

    MySQL_error_code:数值型错误代码

    错误名称:定义条件中自定义的名称

    SQLWARNING:以01开头的SQLSTATE

    NOT FOUND:以02开头的SQLSTATE

    SQLEXCEPTION:除了④、⑤之外的SQLSTATE

    补充:① = ④ + ⑤ + ⑥

  5. 处理语句

    可以是简单的语句,也可是BEGIN…END复合语句

  6. 操作
    CREATE TABLE dep 
    AS
    SELECT * FROM atguigudb.departments;
    
    ALTER TABLE dep 
    ADD CONSTRAINT uk_dept_name UNIQUE(department_id);
    
    DELIMITER //
    CREATE PROCEDURE InsertDataWithCondition()
    	BEGIN
    		DECLARE duplicate_entry CONDITION FOR SQLSTATE '23000';
    		DECLARE EXIT HANDLER FOR duplicate_entry SET @proc_value = -1;
    		
    		SET @x = 1;
    		INSERT INTO dep(department_name) 
    		VALUES ('测试');
    		SET @x = 2;
    		INSERT INTO dep(department_name) 
    		VALUES ('测试');
    		SET @x = 3;
    	END //
    DELIMITER ;
    
    CALL InsertDataWithCondition();
    

标签:错误,十八,错误码,SQLSTATE,MySQL,异常,DECLARE,CONDITION
来源: https://blog.csdn.net/N_ZSX/article/details/122529184