MySQL異常處理
針對儲存過程 、觸發器或函式內部語句可能發生的錯誤或警告資訊,需要進行相關異常或稱 例外的捕捉,然後作出相應的處理,異常處理的方式如下:
DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code| error code| condition_name} handler_actions
· Handler type (CONTINUE, EXIT) :處理型別,繼續或退出
· Handler condition (SQLSTATE, MySQL error code, named condition) :觸發條件
· Hander actions(錯誤觸發的操作)
注意:a、 exit只退出當前的block。
b、 如果定義了handler_action,會在continue或exit之前執行。
發生錯誤的條件有:
· mysql錯誤程式碼
· ANSI-standard SQLSTATE code. 具體可見:http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html
· 命名條件,可自定可使用系統內建的SQLEXCEPTION, SQLWARNING,和 NOT FOUND.
當同時使用MySQl錯誤碼,標準SQLSTATE錯誤碼,命名條件(SQLEXCEPTION)來定義錯誤處理時,其捕獲順序是(只可捕獲一條錯誤):MYSQL碼->SQLSTATE->命名條件
作用域:
begni..end內,哪果錯誤處理定義在begin ... end內,則在該begin...end之外的錯誤不會被捕獲。
它能夠捕獲其它儲過程的錯誤。
- drop table nums;
- drop procedure pCreateNums;
- CREATE TABLE nums (
- id INT NOT NULL PRIMARY KEY,
- b INT NOT NULL
- );
- delimiter $$
- create procedure pCreateNums(cnt int)
- begin
- begin
- declare continue handler for sqlexception rollback;
- start transaction;
- insert into nums(id,b) values(cnt+1,1);
- insert into nums(id,b) values(cnt,null);
- insert into nums(id,b) values(cnt+2,1);
- commit;
- end;
- insert into nums values(100,100);
- select * from nums;
- end $$
- delimiter ;
- call pCreateNums(10);
nums表b欄位為非空.
內部的begin end 由一個異常處理的定義,型別為continue
那麼在執行到下面sql的時候
- insert into nums(id,b) values(cnt,null);
但是後面的SQL繼續執行.
外層的begin end塊也會執行.
結果如下:
mysql> call pCreateNums(10);
+-----+-----+
| id | b |
+-----+-----+
| 12 | 1 |
| 100 | 100 |
+-----+-----+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
但是外層的SQL不受影響.因為異常處理是定義在內層的.
這就是異常處理的作用域.
結果如下:
mysql> call pCreateNums(10);
+-----+-----+
| id | b |
+-----+-----+
| 100 | 100 |
+-----+-----+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
當然,如果異常處理定義在外層。他的作用域就是整個過程.
參考:
http://blog.csdn.net/seteor/article/details/17791855
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2112580/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL定義異常和異常處理詳解MySql
- MySQL遊標和異常處理MySql
- 異常篇——異常處理
- 異常處理
- MySQL Slave異常關機的處理MySql
- 異常-throws的方式處理異常
- 異常處理與異常函式函式
- JavaScript 異常處理JavaScript
- ThinkPHP 異常處理PHP
- React 異常處理React
- 08、異常處理
- JAVA 異常處理Java
- JAVA異常處理Java
- Abp 異常處理
- oracle異常處理Oracle
- PowerShell 異常處理
- plsql異常處理SQL
- Swift 異常處理Swift
- JS異常處理JS
- app異常處理APP
- Oracle 處理異常Oracle
- 異常處理 (轉)
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- 異常的處理
- Java 異常處理Java
- 異常處理機制(二)之異常處理與捕獲
- JSP 異常處理如何處理?JS
- Java 異常表與異常處理原理Java
- restframework 異常處理及自定義異常RESTFramework
- MySQL儲存過程的異常處理方法MySql儲存過程
- MYSQL 主從庫同步 異常處理彙總MySql
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- Python異常處理Python
- PHP 核心 - 異常處理PHP
- Python——異常處理Python
- JAVA_異常處理Java