MySQL 试图恢复两个外键 returns 错误
MySQL trying to restore two foreign keys returns errors
我有这种情况:我有那两个 table:
CREATE TABLE sample_A (
ID bigint(20) UNSIGNED NOT NULL,
product varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE sample_B (
ID bigint(20) UNSIGNED NOT NULL,
ref_id_sample_A_id bigint(20) UNSIGNED NULL,
ref_id_sample_A_ref_id bigint(20) UNSIGNED NULL,
document_name varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我试图恢复 table sample_B
的 ref_id_sample_A_id
和 table sample_A
的 ID
之间的外键,但是执行这条指令:
ALTER TABLE sample_B
ADD CONSTRAINT fk_sample_B_ref_sample_A_id
FOREIGN KEY (ref_id_sample_A_id)
REFERENCES sample_A(ID);
我得到这个错误:
#1823 - Failed to add the foreign key constraint 'k3/fk_sample_B_ref_sample_A_id' to system tables
但是我还没有解决其他外键,如果我查询这个也没有信息:
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
AND TABLE_NAME = 'sample_B';
我得到空结果,而且 table simple_A
不是系统 table...我应该怎么办?在此先感谢大家!
干杯
我使用 MySQL 8.0.26 测试了您的示例,并收到此错误:
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'fk_sample_B_ref_sample_A_id' in the referenced table 'sample_A'
这意味着引用的列 sample_A.ID
作为外键的引用列无效,因为它不是 table 中的键的一部分。
引用的列必须是键的一部分,理想情况下应该是 PRIMARY KEY 或 UNIQUE KEY。
您没有将 ID 或任何其他列定义为 table sample_A
的主键。
无论如何 2 秒前就解决了...必须导出 table 的转储数据,删除 table 并使用 CREATE [=16] 中的所有约束重新创建 table =] 指令然后 re-import 所有转储数据并且它有效。无论如何感谢大家@nbk 和@Bill Karwin! :-)
我有这种情况:我有那两个 table:
CREATE TABLE sample_A (
ID bigint(20) UNSIGNED NOT NULL,
product varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE sample_B (
ID bigint(20) UNSIGNED NOT NULL,
ref_id_sample_A_id bigint(20) UNSIGNED NULL,
ref_id_sample_A_ref_id bigint(20) UNSIGNED NULL,
document_name varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我试图恢复 table sample_B
的 ref_id_sample_A_id
和 table sample_A
的 ID
之间的外键,但是执行这条指令:
ALTER TABLE sample_B
ADD CONSTRAINT fk_sample_B_ref_sample_A_id
FOREIGN KEY (ref_id_sample_A_id)
REFERENCES sample_A(ID);
我得到这个错误:
#1823 - Failed to add the foreign key constraint 'k3/fk_sample_B_ref_sample_A_id' to system tables
但是我还没有解决其他外键,如果我查询这个也没有信息:
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
AND TABLE_NAME = 'sample_B';
我得到空结果,而且 table simple_A
不是系统 table...我应该怎么办?在此先感谢大家!
干杯
我使用 MySQL 8.0.26 测试了您的示例,并收到此错误:
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'fk_sample_B_ref_sample_A_id' in the referenced table 'sample_A'
这意味着引用的列 sample_A.ID
作为外键的引用列无效,因为它不是 table 中的键的一部分。
引用的列必须是键的一部分,理想情况下应该是 PRIMARY KEY 或 UNIQUE KEY。
您没有将 ID 或任何其他列定义为 table sample_A
的主键。
无论如何 2 秒前就解决了...必须导出 table 的转储数据,删除 table 并使用 CREATE [=16] 中的所有约束重新创建 table =] 指令然后 re-import 所有转储数据并且它有效。无论如何感谢大家@nbk 和@Bill Karwin! :-)