存储过程:异常处理condition

drop table if exists t2;

create table t2  
(
	s1 int, primary key (s1)
	)  
engine=innodb;

delete from t2;

drop procedure if exists p24;

delimiter //

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; //  

delimiter ;

call p24();

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

mysql> select * from t2;
Empty set (0.00 sec)

*/
这里是三个预声明的条件: NOT FOUND (找不到行), SQLEXCEPTION (错误),  SQLWARNING (警告或注释)。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值