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 发布
本文展示了一个使用MySQL创建存储过程的例子,该过程通过预声明条件处理SQLSTATE '23000'约束违反错误,并演示了如何在插入重复主键值时触发回滚。
1021

被折叠的 条评论
为什么被折叠?



