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_Bref_id_sample_A_id 和 table sample_AID 之间的外键,但是执行这条指令:

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! :-)