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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Mysql - MySQL異常處理淺析

MySQL異常處理淺析

2020-04-06 14:23shichen2014 Mysql

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

MySQL的異常處理分析如下:

標(biāo)準(zhǔn)格式

?
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細(xì)節(jié)

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以及其他的標(biāo)準(zhǔn).
并不是所有的MySQL ERROR CODE 都映射到SQLSTATE。

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

SQLWARNING 代表所有以01開頭的錯誤代碼
NOT FOUND 代表所有以02開頭的錯誤代碼,當(dāng)然也可以代表一個游標(biāo)到達(dá)數(shù)據(jù)集的末尾。
SQLEXCEPTION 代表除了SQLWARNING和NOT FOUND 的所有錯誤代碼

3、我們現(xiàn)在就用手冊上的例子

?
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; -- 遇到重復(fù)鍵值就退出
  -> 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>

現(xiàn)在來看一下遇到錯誤繼續(xù)的情況

?
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>

可以看到,始終執(zhí)行到最后。
當(dāng)然,上面的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

此列沒有默認(rèn)值,插入的時候會出現(xiàn)警告或者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)

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 麻豆网站在线观看 | 久久国产精品免费网站 | 精品麻豆国产 | 九九热免费在线观看 | 岛国免费大片 | 慢慢娇淫 | 日韩欧美推理片免费看完整版 | seetube18日本第一次 | 校花在公车上被内射好舒服 | 天堂伊人 | 国产精品嫩草影院在线看 | 亚洲成人网在线 | 99在线精品免费视频九九视 | 色综合色狠狠天天综合色 | 欧美日韩国产成人精品 | 好爽好深好猛好舒服视频上 | 精品国产原创在线观看视频 | 边摸边吃奶又黄激烈视频韩国 | 欧美日韩精彩视频 | 久久se精品一区二区国产 | 猛男深夜狂cao小男生 | 毛片免费网站 | 国产一区二区精品久 | 国产免费久久精品44 | se综合| 亚洲 欧美 国产 日韩 字幕 | 久久中文字幕无线观看 | 久久中文字幕乱码免费 | 草莓永久地域网名入2022 | 精品无码久久久久久久动漫 | 国色天香社区视频在线观看免费完整版 | 国产精品高清一区二区三区 | 日韩成人一级 | 4444亚洲国产成人精品 | 欧美精品久久久久久久影视 | 男人天堂网址 | 久久亚洲高清观看 | 亚洲天堂999 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | 国产农村一级特黄α真人毛片 | 喜马拉雅听书免费版 |