如果可能,在与任何引用不匹配时将外键设置为null

rjee0c15  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(296)

我正在下载数据并保存在两个表中,表1和表2,这些表有一对多的关系:
表1列:id、名称
表2列:id表1\u id,col1,col2
我无法控制哪个表将首先接收insert。例如,如果我得到表2的数据,一些条目仍然不存在于表1中。然后我收到一个错误
sqlstate[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败
在表2中,我设置了表1的默认值null,但仍然失败。
当与表\u 1中的任何行不匹配时,是否可以将表\u 1\u id设置为空?
我正在使用laravel5.5和mysql

wz1wpwve

wz1wpwve1#

是的,这是可能的。
当sql由于某些错误而无法执行插入时,它会正确地抛出相应的异常,就像在.net的实体框架连接中一样,它会抛出sqlexception的一些实现。因此,如果您想在由于fk约束导致插入失败时插入null,那么您可以用约束名称捕获sql抛出的相应异常,然后执行必要的操作。
在您的示例中,使用名称创建约束。在代码中,当插入失败时,尝试捕获异常并查看名称。然后尝试用null替换条目来更改条目,然后再次尝试插入并查看它是否被插入。
无论您使用哪种技术,都将提供sql expetion处理。

相关问题