ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL十八:异常处理

2022-01-16 21:32:17  阅读:217  来源: 互联网

标签:错误 十八 错误码 SQLSTATE MySQL 异常 DECLARE CONDITION


异常处理

一、定义条件

  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有