一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL異常處理淺析

MySQL異常處理淺析

2020-04-06 14:23shichen2014 Mysql

這篇文章主要介紹了MySQL的異常處理,需要的朋友可以參考下

MySQL的異常處理分析如下:

標準格式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE handler_type HANDLER FOR condition_value[,...] statement
handler_type:
  CONTINUE
 | EXIT
 | UNDO --這個暫時不支持
condition_value:
  SQLSTATE [VALUE] sqlstate_value
 | condition_name
 | SQLWARNING
 | NOT FOUND
 | SQLEXCEPTION
 | mysql_error_code
condition_value細節

1、常用MYSQL ERROR CODE 列表

http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
更多錯誤列表見MySQL安裝路徑下
比如我的/usr/local/mysql/share/mysql/errmsg.txt
說明一下:SQLSTATE [VALUE] sqlstate_value這種格式是專門為ANSI SQL 和 ODBC以及其他的標準.
并不是所有的MySQL ERROR CODE 都映射到SQLSTATE。

2、如果你不想插ERROR CODE的話,就用速記條件來代替

SQLWARNING 代表所有以01開頭的錯誤代碼
NOT FOUND 代表所有以02開頭的錯誤代碼,當然也可以代表一個游標到達數據集的末尾。
SQLEXCEPTION 代表除了SQLWARNING和NOT FOUND 的所有錯誤代碼

3、我們現在就用手冊上的例子

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
CREATE TABLE t (s1 int,primary key (s1));
mysql> use t_girl
Database changed
mysql> CREATE TABLE t (s1 int,primary key (s1));
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> DELIMITER ||
mysql> CREATE PROCEDURE handlerdemo ()
  -> BEGIN
  -> DECLARE EXIT HANDLER FOR SQLSTATE '23000' BEGIN END; -- 遇到重復鍵值就退出
  -> SET @x = 1;
  -> INSERT INTO t VALUES (1);
  -> SET @x = 2;
  -> INSERT INTO t VALUES (1);
  -> SET @x = 3;
  -> END||
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> call handlerdemo();
Query OK, 0 rows affected (0.00 sec)
mysql> select @x;
+------+
| @x |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
mysql> call handlerdemo();
Query OK, 0 rows affected (0.00 sec)
mysql> select @x;
+------+
| @x |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql>

現在來看一下遇到錯誤繼續的情況

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mysql> truncate table t;
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER $$
mysql> DROP PROCEDURE IF EXISTS `t_girl`.`handlerdemo`$$
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `handlerdemo`()
  -> BEGIN
  -> DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' BEGIN END;
  -> SET @x = 1;
  -> INSERT INTO t VALUES (1);
  -> SET @x = 2;
  -> INSERT INTO t VALUES (1);
  -> SET @x = 3;
  -> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER ;
mysql> call handlerdemo();
Query OK, 0 rows affected (0.00 sec)
mysql> select @x;
+------+
| @x |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
mysql> call handlerdemo();
Query OK, 0 rows affected (0.00 sec)
mysql> select @x;
+------+
| @x |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
mysql>

可以看到,始終執行到最后。
當然,上面的SQLSTATE '23000'可以替換為1062
我們來看一下警告。

?
1
2
3
mysql> alter table t add s2 int not null;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

此列沒有默認值,插入的時候會出現警告或者1364錯誤提示。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> DELIMITER $$
mysql> DROP PROCEDURE IF EXISTS `t_girl`.`handlerdemo`$$
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `handlerdemo`()
  -> BEGIN
  -> DECLARE CONTINUE HANDLER FOR 1062 BEGIN END;
  -> DECLARE CONTINUE HANDLER FOR SQLWARNING
  -> BEGIN
  -> update t set s2 = 2;
  -> END;
  -> DECLARE CONTINUE HANDLER FOR 1364
  -> BEGIN
  -> INSERT INTO t(s1,s2) VALUES (1,3);
  -> END;
  -> SET @x = 1;
  -> INSERT INTO t(s1) VALUES (1);
  -> SET @x = 2;
  -> INSERT INTO t(s1) VALUES (1);
  -> SET @x = 3;
  -> END$$
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> call handlerdemo();
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t;
+----+----+
| s1 | s2 |
+----+----+
| 1 | 3 |
+----+----+
1 row in set (0.00 sec)

遇到錯誤的時候插入的新記錄。

?
1
2
3
4
5
6
7
mysql> select @x;
+------+
| @x |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女班主任下面好爽好湿好紧 | 国产成人精品.一二区 | 青青热久麻豆精品视频在线观看 | 韩国理论三级在线观看视频 | 国产caoni555在线观看 | 成年人在线免费观看视频网站 | 亚洲国产欧美目韩成人综合 | 亚洲国产欧美在线人成aaaa20 | 免费观看一区二区 | 美女张开腿让男人桶的 视频 | www.色小妹 | 美国艳星lisann成人作品 | 半挠脚心半黄的网站 | 青草青草视频2免费观看 | 国产色在线观看 | 爱情岛论坛自拍永久入口 | 日韩欧美一区二区不卡 | 把女的下面扒开添视频 | 亚洲精品午夜视频 | 日韩高清成人毛片不卡 | 九九热在线观看视频 | 精品国产麻豆AV无码 | 色视频亚洲 | 日本动漫打扑克动画片樱花动漫 | 99国产国人青青视频在线观看 | 精品亚洲视频在线观看 | 国产精品免费_区二区三区观看 | 69p69国产精品| 国产成人精品第一区二区 | 日本韩国一区二区三区 | 亚洲福利天堂网福利在线观看 | 特黄特色一级aa毛片免费观看 | 国产精品久久国产三级国电话系列 | 成人综合网站 | 91系列在线观看免费 | 亚洲精品视频久久 | 激情影院费观看 | 四虎影院永久网站 | 亚洲日日做天天做日日谢 | 超碰av| 免费观看视频网站 |