IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>数据库>MySQL5> MySQL5的异常处理
  • IT技术江湖
  • MySQL5的异常处理
    http://www.hack1st.com 来源: 2008-03-24 阅读: 评论

      1. Sample Problem: Log Of Failures 问题样例:故障记录

      当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束

      2. Sample Problem: Log Of Failures (2)

      mysql> CREATE TABLE t2

      1 INT, PRIMARY KEY (s1))

      engine=innodb;//

      mysql> CREATE TABLE t3 (s1 INT, KEY (s1),

      FOREIGN KEY (s1) REFERENCES t2 (s1))

      engine=innodb;//

      mysql> INSERT INTO t3 VALUES (5);//

      ...

      ERROR 1216 (23000): Cannot add or update a child row: a foreign key

      constraint fails(这里显示的是系统的出错信息)

      我开始要创建一个主键表,以及一个外键表。我们使用的是InnoDB,因此外键关联检查是打开的。然后当我向外键表中插入非主键表中的值时,动作将会失败。当然这种条件下可以很快找到错误号1216。

      3. Sample Problem: Log Of Failures

      CREATE TABLE error_log (error_message

      CHAR(80))//

      下一步就是建立一个在做插入动作出错时存储错误的表。

      4. Sample Problem: Log Of Errors

      CREATE PROCEDURE p22 (parameter1 INT)

      BEGIN

      DECLARE EXIT HANDLER FOR 1216

      INSERT INTO error_log VALUES

      (CONCAT('Time: ',current_date,

      '. Foreign Key Reference Failure For

      Value = ',parameter1));

      INSERT INTO t3 VALUES (parameter1);

      END;//

      上面就是我们的程序。这里的第一个语句DECLARE EXIT HANDLER是用来处理异常的。意思是如果错误1215发生了,这个程序将会在错误记录表中插入一行。EXIT意思是当动作成功提交后退出这个复合语句。

      5. Sample Problem: Log Of Errors

      CALL p22 (5) //

      调用这个存储过程会失败,这很正常,因为5值并没有在主键表中出现。但是没有错误信息返回因为出错处理已经包含在过程中了。t3表中没有增加任何东西,但是error_log表中记录下了一些信息,这就告诉我们INSERT into table t3动作失败。

      DECLARE HANDLER syntax 声明异常处理的语法

      DECLARE

      { EXIT | CONTINUE }

      HANDLER FOR

      { error-number | { SQLSTATE error-string } | condition }

      SQL statement

      上面就是错误处理的用法,也就是一段当程序出错后自动触发的代码。MySQL允许两种处理器,一种是EXIT处理,我们刚才所用的就是这种。另一种就是我们将要演示的,CONTINUE处理,它跟EXIT处理类似,不同在于它执行后,原主程序仍然继续运行,那么这个复合语句就没有出口了。

      1. DECLARE CONTINUE HANDLER example CONTINUE处理例子

      CREATE TABLE t4 (s1 int,primary key(s1));//

      CREATE PROCEDURE p23 ()

      BEGIN

      DECLARE CONTINUE HANDLER

      FOR SQLSTATE '23000' SET @x2 = 1;

      SET @x = 1;

    上一页12 下一页

    上一篇:Heartbeat_2.0.3配置MySQL5.0.18集群  
    下一篇:Mysql入门系列:客户机程序5—MYSQL交互式查询程序

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·修改Linux下mysql 5.0.xx默认连接数
      ·MySQL 4.0 升级到5.0
      ·MySQL 5.0 新特性--存储过程
      ·MySQL 5.0-触发器(参考)
      ·Mysql入门系列:客户机程序5—MYSQL交互式
      ·MySQL5的异常处理
      ·Heartbeat_2.0.3配置MySQL5.0.18集群
      ·PHP5连接Mysql5的认证协议问题
      ·MySQL 5.1的中文支持的一个改进
      ·mysql5中遇到的字符集问题以及解决办法
    最新更新
    • ·修改Linux下mysql 5.0.xx默认连接数
      ·MySQL 4.0 升级到5.0
      ·MySQL 5.0 新特性--存储过程
      ·MySQL 5.0-触发器(参考)
      ·Mysql入门系列:客户机程序5—MYSQL交互式
      ·MySQL5的异常处理
      ·Heartbeat_2.0.3配置MySQL5.0.18集群
      ·PHP5连接Mysql5的认证协议问题
      ·MySQL 5.1的中文支持的一个改进
      ·mysql5中遇到的字符集问题以及解决办法
    文章关注度排行
    ·MySQL 4.0 升级到5.0
    ·MySQL5中文乱码解决
    ·mysql5中遇到的字符集问题以及解决办法
    ·MYSQL5的masterslave数据同步配置
    ·修改Linux下mysql 5.0.xx默认连接数
    ·MySQL 5.0-触发器(参考)
    ·MySQL 5.0 新特性--存储过程
    ·Heartbeat_2.0.3配置MySQL5.0.18集群
    热点推荐
    mysql5中遇到的字符集问题以及解决办法
    mysql5中遇到的字符集问
    频道推荐
    • ·mysql5中遇到的字符集问题以及解决办法
    本站精华
    mysql5中遇到的字符集问题以及解决办法
    mysql5中遇到
    • ·mysql5中遇到的字符集问题以及
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号