2016-12-15 42 views
0

我正在使用phpMyAdmin的WAMP堆棧,數據庫引擎是MyISAM。我創建了兩個表格:Parent,Child。在Parent表中,我將id列設置爲PK,並在Child表中將parent_id列設置爲FK。根據我的理解,這種關係不會允許我將記錄添加到child.parent_id的值與parent.id中的任何值不匹配的子表中。爲什麼我的外鍵關係不適用約束規則?

然後我插入一行數據到父表中(從而創建1個記錄,其id列= 1)。但後來我試圖用parent_id = 2插入一行到Child表中,它允許我。

爲什麼?

快照表結構: http://i.imgur.com/qMbZuI5.png

+0

在將數據庫引擎更改應用於InnoDB之後,仍然允許將行添加到子表中,該子表的fk不匹配任何父級的PK。困惑。 *也不能刪除我的答案,因爲它被自動批准,因爲沒有其他評論... – brooklynsweb

+0

但令人驚訝的是,當我在同一個數據庫中創建兩個新表,並從一開始就將它們的引擎設置爲InnoDB,然後嘗試測試相同的約束,它確實觸發了。這是否意味着使用MyISAM創建,然後充滿數據,然後將其引擎更改爲InnoDB的表仍然忽略這些約束?這是我所經歷的行爲。 – brooklynsweb

回答

0

我的懷疑是從Quora的回答:MyISAM不強制執行此約束。改爲InnoDB。

+0

無法刪除我的答案,因爲它被自動批准,因爲沒有其他評論... – brooklynsweb