亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL定義異常和異常處理詳解

2024-07-24 13:11:10
字體:
來源:轉載
供稿:網友

在MySQL中,特定異常需要特定處理。這些異??梢月撓档藉e誤,以及子程序中的一般流程控制。定義異常是事先定義程序執行過程中遇到的問題,異常處理定義了在遇到問題時對應當采取的處理方式,并且保證存儲過程或者函數在遇到錯誤時或者警告時能夠繼續執行。 

1 異常定義 

1.1 語法

DECLARE condition_name CONDITION FOR [condition_type]; 

1.2 說明

condition_name參數表示異常的名稱; 
condition_type參數表示條件的類型,condition_type由SQLSTATE [VALUE] sqlstate_value|mysql_error_code組成:

      sqlstate_value和mysql_error_code都可以表示MySQL的錯誤;
      sqlstate_value為長度為5的字符串類型的錯誤代碼;
      mysql_error_code為數值類型錯誤代碼; 

1.3 示例 
定義“ERROR 1148(42000)”錯誤,名稱為command_not_allowed??梢杂幸韵聝煞N方法: 

//方法一:使用sqlstate_value DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000′; //方法二:使用mysql_error_code DECLARE command_not_allowed CONDITION FOR 1148; 

2 自定義異常處理 

2.1 異常處理語法

DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement 

2.2 參數說明

handler_type: CONTINUE|EXIT|UNDO

 handler_type為錯誤處理方式,參數為3個值之一;
 CONTINUE表示遇到錯誤不處理,繼續執行;
 EXIT表示遇到錯誤時馬上退出;
 UNDO表示遇到錯誤后撤回之前的操作,MySQL暫不支持回滾操作; 

condition_value: SQLSTATE [VALUE] sqlstate_value| condition_name|SQLWARNING|NOT FOUND|SQLEXCEPTION|mysql_error_code

 condition_value表示錯誤類型;
 SQLSTATE [VALUE] sqlstate_value為包含5個字符的字符串錯誤值;
 condition_name表示DECLARE CONDITION定義的錯誤條件名稱;
 SQLWARNING匹配所有以01開頭的SQLSTATE錯誤代碼;
 NOT FOUND匹配所有以02開頭的SQLSTATE錯誤代碼;
 SQLEXCEPTION匹配所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE錯誤代碼;
 mysql_error_code匹配數值類型錯誤代碼; 

2.3 異常捕獲方法

//方法一:捕獲sqlstate_value異常 //這種方法是捕獲sqlstate_value值。如果遇到sqlstate_value值為”42S02″,執行CONTINUE操作,并輸出”NO_SUCH_TABLE”信息 DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02′ SET @info='NO_SUCH_TABLE'; //方法二:捕獲mysql_error_code異常 //這種方法是捕獲mysql_error_code值。如果遇到mysql_error_code值為1146,執行CONTINUE操作,并輸出”NO_SUCH_TABLE”信息; DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE'; //方法三:先定義條件,然后捕獲異常 DECLARE no_such_table CONDITION FOR 1146; DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info='NO_SUCH_TABLE';  //方法四:使用SQLWARNING捕獲異常 DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';  //方法五:使用NOT FOUND捕獲異常 DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TABLE';//方法六:使用SQLEXCEPTION捕獲異常 DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';

3 綜合示例

創建一個表,設置該表的主鍵,在不定義異常處理和定義異常處理情況下看執行到哪一步。

show databases;use wms;create table location(location_id int primary key,location_name varchar(50)); 

示例1:不定義異常情況下

 DELIMITER //CREATE PROCEDURE handlerInsertNoException()BEGIN /*DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;*/ SET @x=1; INSERT INTO location VALUES (1,'Beijing'); SET @x=2; INSERT INTO location VALUES (1,'Wuxi'); SET @x=3;END;//DELIMITER ; 

調用存儲過程與結果:

 mysql> call handlerInsertNoException();ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'mysql> select @x;+------+| @x  |+------+|  2 |+------+1 row in set (0.00 sec)mysql> select * from location;+-------------+---------------+| location_id | location_name |+-------------+---------------+|      1 | Beijing    |+-------------+---------------+1 row in set (0.00 sec) 

注意:操作示例2前要清空表中數據,并退出重新登錄,以免客戶端變量@x影響,詳細說明參見結論中的第一點。

 mysql> truncate table location;Query OK, 0 rows affected (0.04 sec)mysql> select * from location;Empty set (0.00 sec)mysql> exit;Byedavid@Louis:~$ mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 53Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)mysql> use wms;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from location;Empty set (0.00 sec)mysql> select @x;+------+| @x  |+------+| NULL |+------+1 row in set (0.00 sec)

 示例2:定義異常處理情況下:

 DELIMITER //CREATE PROCEDURE handlerInsertWithException()BEGIN DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1; SET @x=1; INSERT INTO location VALUES (1,'Beijing'); SET @x=2; INSERT INTO location VALUES (1,'Wuxi'); SET @x=3;END;//DELIMITER ; 

調用存儲過程與結果:

 mysql> CALL handlerInsertWithException();Query OK, 0 rows affected (0.09 sec)mysql> select @x;+------+| @x  |+------+|  3 |+------+1 row in set (0.00 sec) 

說明與結論:

一、MySQL中,@var_name表示用戶變量,使用SET語句為其賦值,用戶變量與連接有關,一個客戶端定義的變量不能被其他客戶端看到或者使用。當客戶端退出時,該客戶端連接的所有變量將自動釋放。 

二、在示例1中,由于注釋了異常的聲明”",此時向表中插入相同主鍵,就會觸發異常,并且采取默認(EXIT)路徑;且查看此時的@x返回2,表示下面的INSERT語句并沒有執行就退出了. 

三、定義了異常處理,此時遇到錯誤也會按照異常定義那樣繼續執行;但只有第一條數據被插入到表中,此時用戶變量@x=3說明已經執行到了結尾;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩电影在线观看| 91精品久久久久久久久不口人| 日本久久久久久久久久久| 日韩国产高清污视频在线观看| 精品久久久久久久久久久久| 国产a∨精品一区二区三区不卡| 久久久久久欧美| 精品成人av一区| 亚洲欧洲日产国码av系列天堂| 欧美在线观看网址综合| 日韩亚洲第一页| 欧美色视频日本版| 久久五月情影视| 精品国产老师黑色丝袜高跟鞋| 国产伊人精品在线| 播播国产欧美激情| 欧美精品国产精品日韩精品| 国产精品色午夜在线观看| 精品国产一区二区在线| 久久影视电视剧免费网站清宫辞电视| 欧美日韩亚洲高清| 日韩av在线看| 97香蕉久久超级碰碰高清版| 亚洲а∨天堂久久精品喷水| 91免费看片网站| 911国产网站尤物在线观看| 国产精品99久久久久久久久| 国模私拍一区二区三区| 九九热精品在线| 亚洲综合在线小说| 在线看福利67194| 久久国产一区二区三区| 日韩在线视频网站| 97精品久久久中文字幕免费| 久久精品成人欧美大片| 国产精品黄色影片导航在线观看| 欧美日韩成人网| 2021久久精品国产99国产精品| 亚洲成人久久一区| 少妇av一区二区三区| 亚洲精品一区二区在线| 国产精品免费看久久久香蕉| 亚洲性夜色噜噜噜7777| 欧美激情2020午夜免费观看| 国产精品久久久久久av福利| 国产日韩在线播放| 中文字幕亚洲欧美日韩2019| 亚洲国产高清高潮精品美女| 欧美洲成人男女午夜视频| 色噜噜国产精品视频一区二区| 成人做爰www免费看视频网站| 国产日产久久高清欧美一区| 欧美福利小视频| 亚洲精品视频中文字幕| 国产精品扒开腿做爽爽爽视频| 一本色道久久综合狠狠躁篇的优点| 国产日韩欧美在线观看| 国产黑人绿帽在线第一区| 亚洲精品久久久久久久久久久久久| 亚洲美女精品成人在线视频| 久久大大胆人体| 国产精品国产自产拍高清av水多| 久久天天躁狠狠躁夜夜爽蜜月| 亚州精品天堂中文字幕| 中文字幕一区电影| 91精品国产乱码久久久久久久久| 日韩精品久久久久| 成人黄色免费片| 北条麻妃一区二区在线观看| 国产精品一区二区三区毛片淫片| 久久成年人免费电影| 91色视频在线观看| 国产精品美女在线观看| 亚洲精品一区二区网址| 久久天天躁狠狠躁夜夜躁2014| 日韩电影免费观看在线| 91精品国产色综合久久不卡98| 日韩国产精品亚洲а∨天堂免| 国产精品视频中文字幕91| 亚洲国产精品999| 欧美大荫蒂xxx| 亚洲欧美色婷婷| 亚洲区在线播放| 欧美放荡办公室videos4k| 国产精品电影一区| 国产成人一区二区三区小说| 91视频免费在线| 久操成人在线视频| 亚洲三级 欧美三级| 国产精品吊钟奶在线| 国产精品普通话| 欧美激情亚洲综合一区| 欧美中文字幕视频在线观看| 国产成人av网| 日韩欧美在线国产| 日韩网站在线观看| 欧美成人sm免费视频| 日韩国产欧美精品一区二区三区| 美女视频黄免费的亚洲男人天堂| 91中文在线视频| 蜜月aⅴ免费一区二区三区| 91美女片黄在线观| 色噜噜狠狠狠综合曰曰曰88av| 日韩视频精品在线| 日韩欧美a级成人黄色| 久久五月天综合| 国产精品久久久久免费a∨| 欧美日韩国产一中文字不卡| 中文字幕亚洲欧美| 国内精品小视频| 欧美精品18videosex性欧美| 亚洲欧美日韩一区在线| 亚洲精品中文字幕女同| 亚洲伊人成综合成人网| 最好看的2019年中文视频| 日韩av手机在线观看| 国产欧美一区二区三区久久人妖| 97在线免费视频| 久久精品国产一区| 一区二区三区视频免费在线观看| 亚洲色图日韩av| 91免费精品视频| 成人做爰www免费看视频网站| 精品电影在线观看| 91久久精品美女| 日韩精品免费电影| 久久91超碰青草是什么| 亚洲国产成人精品女人久久久| 91香蕉亚洲精品| 伊人久久综合97精品| 最近2019中文字幕大全第二页| 最近的2019中文字幕免费一页| 91免费精品国偷自产在线| 国产91在线高潮白浆在线观看| 日本韩国欧美精品大片卡二| 欧美性videos高清精品| 欧美激情第一页xxx| 亚洲最大av在线| 亚洲免费视频在线观看| 国内精品免费午夜毛片| 热久久99这里有精品| 国产精品第1页| 久久九九全国免费精品观看| 亚洲欧洲国产伦综合| 亚洲美女激情视频| 国产网站欧美日韩免费精品在线观看| 日韩性生活视频| 久久伊人精品视频| 日韩视频免费中文字幕| 欧美日韩第一视频| 欧美精品18videosex性欧美| 欧美日韩国产一区中文午夜| 国产999精品久久久影片官网| 国产精品成人av在线| 色婷婷综合久久久久中文字幕1| 另类专区欧美制服同性| 成人高h视频在线| 国产激情久久久| 亚洲综合日韩中文字幕v在线| 国产精品黄页免费高清在线观看| 亚洲国产精品久久久久| 日韩亚洲成人av在线| 久久国产精彩视频| 国产精品成人一区二区三区吃奶|