我有两张 table
表A(id_A, name_A, info_A)
表B(id_B, A_id, some_data) 外键(A_id) 引用表A(id_A)
那么当我在 B 中插入一行,并将值 XXX 作为第二列 id_A 的值时,table_A 是否必须有一行 ID 为 XXX 的行?
如果不是,那么我应该对表施加什么约束,以便表 B 仅引用存在的 table_A 行?
最佳答案
是的,如果 TableA.id_A 是主键,而 TableB.A_id 有引用该主键的外键约束,那么在 TableB.A_id 可以包含 XXX 之前,XXX 值必须存在于 TableA.id_A 中。
这也意味着您不能删除或更改 TableA.id_A 中的 XXX 值,而值 XXX 存在于 TableB.A_id 中。您必须先删除、更改或设置 TableB.A_id 中的 NULL 值。您还可以使用 CASCADE 选项声明外键,以便 TableA 中的更改也自动应用于 TableB。但是从属表中永远不能有“孤立”值。
请注意,如果您对 TableA 或 TableB 使用 MyISAM 存储引擎,那么您对外键约束的定义将被静默忽略,并且数据库不会在两个表之间强制执行任何引用完整性。您必须对这两个表使用 InnoDB 存储引擎以获得对外键约束的支持。
关于mysql - mysql 表中的外键-是否需要目标数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133821/