gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:44:49 24 4
gpt4 key购买 nike

在这种情况下,我想知道是否有可能针对这些特定约束fkt3_1fkt3_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 ;

最佳答案

答案是否定的,也是肯定的。

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

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

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

关于mysql - 如何处理 mysql 中特定约束的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com