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 (警告或注释)。
存储过程:异常处理condition
最新推荐文章于 2021-09-02 14:46:06 发布