【发布时间】:2017-05-01 09:28:48
【问题描述】:
我正在使用带有 phpMyAdmin 的 WAMP 堆栈,数据库引擎是 MyISAM。我创建了两个表:父、子。在 Parent 表中,我将 id 列设置为 PK,在 Child 表中,我将 parent_id 列设置为 FK。根据我的理解,这种关系不允许我向子表中添加一条记录,其中 child.parent_id 的值与 parent.id 中的任何值都不匹配。
然后我将一行数据插入到 Parent 表中(从而创建了 1 条记录 who's id column = 1)。但后来我尝试用 parent_id = 2 在 Child 表中插入一行,它允许我。
为什么?
表结构的快照: http://i.imgur.com/qMbZuI5.png
【问题讨论】:
-
在将数据库引擎更改应用到 InnoDB 之后,我仍然可以将行添加到其 fk 与任何父 PK 不匹配的子表中。使困惑。 *也无法删除我的答案,因为它被自动批准,因为没有其他 cmets...
-
但令人惊讶的是,当我在同一个数据库中创建两个新表并从一开始就将它们的引擎设置为 InnoDB,然后尝试测试相同的约束时,它确实正确触发了。这是否意味着使用 MyISAM 创建的表,然后填充数据,然后将其引擎更改为 InnoDB,仍然忽略这些约束?这是我正在经历的行为。
标签: mysql phpmyadmin foreign-keys