在这种情况下,我想知道是否有可能在任何特定约束 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 ;
答案 0 :(得分:0)
答案是肯定的,是的。
不,你不能声明只有在特定外键触发mysql错误1452时才会触发的处理程序。你只能定义在任何一段代码导致错误1452时将触发的处理程序。请参阅DECLARE ... HANDLER上的mysql文档语法。
话虽如此,您可以在存储过程中声明一个变量,并在对t3记录进行任何更改之前设置其值,以指示t3将被更改。如果后续代码触发1452错误的错误处理程序,那么你可以检查变量的值,并在处理程序的主体中做出决定如何处理那些特殊错误。
另一个解决方案是以这种方式放置错误处理程序的定义,它只在存储过程中应用特定的代码片段,从而修改t3数据。错误处理程序本质上就像变量一样,处理程序适用于定义它的块中的所有语句。