如何处理mysql中特定约束的错误?

时间:2015-12-10 09:35:50

标签: mysql stored-procedures

在这种情况下,我想知道是否有可能在任何特定约束 fkt3_1 fkt3_2 的过程中控制外来错误。

尝试单独处理错误

表示例:

create table t1(
    id int,
    name varchar(20),
    constraint pkt1 primary key(id)
)

create table t2(
    id int,
    name varchar(20),
    constraint pkt2 primary key(id)
)

create table t3(
    id int,
    fromt1 int,
    fromt2 int,
    constraint pkt1 primary key(id),
    constraint fkt3_1 foreign key(fromt1) references t1(id),
    constraint fkt3_2 foreign key(fromt2) references t2(id)
)

步骤:

delimiter $$
create procedure ins(pid int, toT1 int, toT2 int)
begin
    declare exit handler for 1452 select 'Error Found for fkt3_1 and fkt3_2';
    insert into t3 values(pid,toT1,toT2);
end $$
delimiter ; 

1 个答案:

答案 0 :(得分:0)

答案是肯定的,是的。

不,你不能声明只有在特定外键触发mysql错误1452时才会触发的处理程序。你只能定义在任何一段代码导致错误1452时将触发的处理程序。请参阅DECLARE ... HANDLER上的mysql文档语法。

话虽如此,您可以在存储过程中声明一个变量,并在对t3记录进行任何更改之前设置其值,以指示t3将被更改。如果后续代码触发1452错误的错误处理程序,那么你可以检查变量的值,并在处理程序的主体中做出决定如何处理那些特殊错误。

另一个解决方案是以这种方式放置错误处理程序的定义,它只在存储过程中应用特定的代码片段,从而修改t3数据。错误处理程序本质上就像变量一样,处理程序适用于定义它的块中的所有语句。