mysql - mysql 表中的外键-是否需要目标数据?

标签 mysql foreign-keys

我有两张 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/

相关文章:

php - php 的 MYSQL 数据库连接

mysql - 无法删除索引

mysql - 同一表和组的多个外键

mysql - ID 引用表而不是表中的列

mysql - 为什么 MySql 服务没有在 WAMP 上启动?

php - 对总计未存储在数据库中的值的总和进行排名

php - 将JSON插入Mysql问题(ajax/php)

php - 从一个mysql表复制一行到另一个表,并修改字段值

objective-c - 如何在核心数据中表示外键关系 - XCode 中的数据模型

MySQL 关系查询——JOIN 是答案吗?