激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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)

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品视频一区 | 成人毛片100部免费观看 | 一级毛片播放 | 午夜网站视频 | av成人免费在线观看 | 中文字幕在线观看国产 | 国内精品免费一区二区2001 | 欧美激情性色生活片在线观看 | 久久我不卡| 91黄瓜视频 | 欧美精品18videos性欧美 | 欧美亚洲免费 | 欧美一级鲁丝片免费看 | 欧美一级淫片免费播放口 | 国产精品爱久久久久久久 | 国产免费高清在线视频 | 粉嫩蜜桃麻豆免费大片 | 九一国产精品 | 久久精品一区二区三区不卡牛牛 | 一级电影免费在线观看 | 国产精品免费久久久 | 国产资源视频在线观看 | 欧美精品成人一区二区三区四区 | 色污视频在线观看 | 蜜桃视频在线观看免费 | 久久综合九色综合久久久精品综合 | 国产黄色录像片 | 一级毛片真人免费播放视频 | 国产精品一区自拍 | 偿还电影免费 | 91免费在线播放 | 91精品国产综合久久婷婷香 | 日韩在线欧美在线 | 999久久国精品免费观看网站 | 特级黄色小说 | 亚洲福利视 | 一边吃奶一边摸下娇喘 | 99精品视频在线免费观看 | 91九色蝌蚪国产 | 韩国一级免费视频 | 日本免费一区二区三区四区 |