gpt4 book ai didi

mysql - InnoDB监控输出不清晰,外键约束失效

转载 作者:行者123 更新时间:2023-11-30 21:38:01 24 4
gpt4 key购买 nike

我有两个数据库表,InnoDB,都有一个列 id_fornitore,没有办法创建外键,我不明白为什么。这是一个简单的外键,我已经成功地在同一张表上创建了其他外键。这是我的查询:

ALTER TABLE tbl_prima_nota
ADD CONSTRAINT fk_id_fornitore
FOREIGN KEY (id_fornitore) REFERENCES tbl_fornitori(id_fornitore)
ON DELETE SET NULL
ON UPDATE CASCADE

这是数据库状态监视器的输出:

Foreign key constraint fails for table `fatturazione2`.`#sql-68_409`:
,
CONSTRAINT `fk_id_fornitore` FOREIGN KEY (`id_fornitore`) REFERENCES `tbl_fornitori` (`id_fornitore`) ON DELETE SET NULL ON UPDATE CASCADE
Trying to add in child table, in index fk_id_fornitore tuple:
DATA TUPLE: 2 fields;
0: len 4; hex 80000000; asc ;;
1: len 4; hex 80000001; asc ;;

But in parent table `fatturazione2`.`tbl_fornitori`, in index uk_id_fornitore,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000001; asc ;;
1: len 4; hex 80000001; asc ;;

有人能理解这里发生了什么吗?非常感谢。

更新感谢Bill Karwin对于查询,Rick James给我指明正确的方向。问题是:当我第一次将列 id_fornitore 添加到表 tbl_prima_nota 时,我允许 NULL 作为可能的值,但我没有选择它作为默认;在创建列时,由于表已经填充,MySQL 在每一行中添加了 0 作为默认值,但是 0 不同于 NULL。作为一个快速的解决方案,由于 id_fornitore 列是空的,我将其从 tbl_prima_nota 中删除,并使用 NULL 作为默认值重新创建,然后我可以毫无问题地创建外键。

最佳答案

子表外键中的每个值都必须引用父表主键或唯一键中的相应值。

您不能在 tbl_prima_nota.id_fornitore 列上创建外键,因为该列包含一些在引用的 tbl_fornitori.id_fornitore 中缺失的值。

可以查询父表中缺少外键值的子表中的行:

SELECT pn.*
FROM tbl_prima_nota AS pn
LEFT OUTER JOIN tbl_fornitori AS f USING (id_fornitore)
WHERE f.id_fornitore IS NULL;

您必须将缺少值的行添加到 tbl_fornitori,或者从 tbl_prima_nota 中删除行,或者更新这些行以更改外键列中的值.

关于mysql - InnoDB监控输出不清晰,外键约束失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013952/

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