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

如何处理mysql中特定约束的错误?,mysql,stored-procedures,Mysql,Stored Procedures,在这种情况下,我想知道是否有可能控制任何特定约束fkt3_1和fkt3_2的程序中的外国错误 尝试分别处理错误 表格示例: 创建表t1 id int, 名字叫varchar20, 约束pkt1主密钥ID 创建表t2 id int, 名字叫varchar20, 约束pkt2主键ID 创建表t3 id int, fromt1 int, fromt2 int, 约束pkt1主密钥ID, 约束fkt3_1来自T1引用t1id的外键, 约束fkt3_2外键FROMT2引用t2id 程序: 分隔符$$ 创建

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

尝试分别处理错误

表格示例:

创建表t1 id int, 名字叫varchar20, 约束pkt1主密钥ID 创建表t2 id int, 名字叫varchar20, 约束pkt2主键ID 创建表t3 id int, fromt1 int, fromt2 int, 约束pkt1主密钥ID, 约束fkt3_1来自T1引用t1id的外键, 约束fkt3_2外键FROMT2引用t2id 程序:

分隔符$$ 创建过程inspid int、toT1 int、toT2 int 开始 声明1452的退出处理程序,选择“为fkt3_1和fkt3_2发现错误”; 插入t3值SPID、toT1、toT2; 结束$$ 定界符;
答案是否定的和肯定的

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

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


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

是否要在该存储过程中插入/更新/删除其他表,这可能会违反其他fk限制?此示例仅适用于插入情况,我想这样做:为1452声明退出处理程序,fkt3_1选择“为fkt3_1找到错误”;-和-为1452声明退出处理程序,fkt3_2选择“为fkt3_2发现错误”;我知道我给你们举的例子不起作用,但我认为这是我正在寻找的一个很好的例子。