带你轻松接触MySQL数据库的异常处理

灏忊櫏楝

灏忊櫏楝

2016-02-19 16:39

今天图老师小编要向大家分享个带你轻松接触MySQL数据库的异常处理教程,过程简单易学,相信聪明的你一定能轻松get!

  对于MySQL的异常处理,本人不常用。不过我觉得还是有写下来的必要。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  标准格式

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

  警告:

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

  这个列没有默认值,插入的时候会出现警告或者1364错误提示。

  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;

  +------+

  | @x |

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  +------+

  | 3 |

  +------+

  1 row in set (0.00 sec)

展开更多 50%)
分享

猜你喜欢

带你轻松接触MySQL数据库的异常处理

编程语言 网络编程
带你轻松接触MySQL数据库的异常处理

MySQL数据库格式轻松转

MySQL mysql数据库
MySQL数据库格式轻松转

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL 备份还原数据库批处理

编程语言 网络编程
MySQL 备份还原数据库批处理

mysql 数据库设计

编程语言 网络编程
mysql 数据库设计

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库备份

MySQL mysql数据库
MySQL数据库备份

MySQL数据库的多表操作和备份处理

MySQL mysql数据库
MySQL数据库的多表操作和备份处理

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win7/Win8.1升级Win10安装失败错误代码0x80070002解决方法

Win7/Win8.1升级Win10安装失败错误代码0x80070002解决方法

MySQL与Sun结合:能否赢得数据库一片天?

MySQL与Sun结合:能否赢得数据库一片天?
下拉加载更多内容 ↓