WEB开发网
开发学院数据库MySQL MySQL 5.0新特性教程 存储过程:第四讲 阅读

MySQL 5.0新特性教程 存储过程:第四讲

 2005-10-31 16:42:19 来源:WEB开发网   
核心提示: 1. DECLARE CONDITIONCREATE PROCEDURE p24 ()BEGINDECLARE `Constraint Violation`CONDITION FOR SQLSTATE '23000';DECLARE EXIT HANDLER FOR`Constraint Viola


1. DECLARE CONDITION

CREATE PROCEDURE p24 ()
BEGIN
DECLARE `Constraint Violation`
CONDITION FOR SQLSTATE '23000';
DECLARE EXIT HANDLER FOR
`Constraint Violation` ROLLBACK;
START TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (1);
COMMIT;
END; //


  这是另外一个错误处理的例子,在前面的基础上修改的。事实上你可给SQLSTATE或者错误代码其他的名字,你就可以在处理中使用自己定义的名字了。下面看它是怎么实现的:我把表t2定义为InnoDB表,所以对这个表的插入操作都会ROLLBACK(回滚),ROLLBACK(回滚事务)也是恰好会发生的。因为对主键插入两个同样的值会导致SQLSTATE 23000错误发生,这里SQLSTATE 23000是约束错误。

2. DECLARE CONDITION声明条件

CREATE PROCEDURE p24 ()
BEGIN
DECLARE `Constraint Violation`
CONDITION FOR SQLSTATE '23000';
DECLARE EXIT HANDLER FOR
`Constraint Violation` ROLLBACK;
START TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (1);
COMMIT;
END; //


  这个约束错误会导致ROLLBACK(回滚事务)和SQLSTATE 23000错误发生。


3. DECLARE CONDITION

MySQL(和PHP搭配之最佳组合)> CALL p24()//
Query OK, 0 rows affected (0.28 sec)


MySQL(和PHP搭配之最佳组合)> SELECT * FROM t2//
Empty set (0.00 sec)


  我们调用这个存储过程看结果是什么,从上面结果我们看到表t2没有插入任何记录。全部事务都回滚了。这正是我们想要的。

上一页  1 2 3 4 5 6 7 8 9 10 11  下一页

Tags:MySQL 特性 教程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接