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

来源:mysql 作者:AB;翻译:陈朋奕 2007-09-24 出处:pcdog.com

java  mysql安全  存储过程  错误代码  
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 


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> CALL p24()//
Query OK, 0 rows affected (0.28 sec)


mysql> SELECT * FROM t2//
Empty set (0.00 sec)


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


更多内容请看PCdog.com--Fireworks教程  mysql 存储过程  MySQL数据备份专题
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 
上一篇:MySQL实现表中取出随机数据
下一篇:MySQL 5.0 新特性教程 存储过程:第三讲