带你轻松接触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 的所有错误代码。 3、具体示例: 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>
遇到错误继续的情况
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 DEFIN |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |