欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【带你轻松玩转MySQL数据库的异常处理】,下面是详细的分享!
带你轻松玩转MySQL数据库的异常处理
对于MySQL的异常处理,本人不常用。不过我觉得还是有写下来的必要。
标准格式
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 列表
如果需要查看更多的错误列表可以直接到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 的所有错误代码。
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>
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>
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)
遇到错误时,插入的新记录。
| mysql> select @x;
+------+
+------+
+------+
|
以上所分享的是关于带你轻松玩转MySQL数据库的异常处理,下面是编辑为你推荐的有价值的用户互动:
相关问题:“System.Data.SqlClient.SqlException”类型的未经...
答:检查一下连接字符串,错误很明显了 >>详细
相关问题:如何轻松解决MYSQL数据库连接过多的错误
答:1.要在debug模式下 2.选中web service的项目作为 3.选中要调试的asmx或者svc文件 4.设置好断点 5.按F5 会启动IE浏览asmx或者svc.等在那里就可以了。 这时候客户端调用webservice,到断点就会停止。 >>详细
相关问题:如何轻松解决MYSQL数据库连接过多的错误
答:系统不能连接数据库,关键要看两个数据: 1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。 2、数据库当前的连接线程数threads_connected。这是动态变化的。 查看max_connections... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
