2013-07-28 358 views
0

我遇到了一些外鍵約束問題,可能沒有正確地將代碼放在一起。MySQL外鍵約束

這個想法是,機場表將只接受apType表中的類型值。如果該類型不在apType表中,則應該生成一個錯誤。然而,我一直在測試這個,我無法讓它產生一個錯誤,它只是將輸入的數據類型放入數據庫中,並對它感到滿意。

機場表:

CREATE TABLE `airport`(
`id` int primary key AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
`rwyCount` int, 
`lat` float(6), 
`lon` float(6), 
`type` varchar(255), 
constraint FOREIGN KEY (type) REFERENCES apType(type) match simple 
)ENGINE=MyISAM DEFAULT CHARSET=latin1; 

apType表:

CREATE TABLE `apType`(
`id` int primary key AUTO_INCREMENT, 
`type` varchar(255) NOT NULL 
)ENGINE=MyISAM DEFAULT CHARSET=latin1; 

爲apType值的插入(這些是應該是有效的唯一值):

INSERT INTO `apType` (`type`) VALUES ('private'),('public'),('military'); 

插入該應該會產生一個錯誤:

insert into `airport` (`name` , `rwyCount` , `type` , `lat` , `lon`) values ('failland', 3 , 'space', 45.588611, -122.5975); 

任何人都可以找出這個問題嗎?

+0

網絡上有文章解釋了這一點。你有沒有嘗試使用你最喜歡的搜索引擎?這是一種非常高效的學習技能 - 研究自己對自己問題的答案的能力。 – MatBailie

+0

我確實,許多答案提供了有用的信息,但沒有能夠解決我的問題 –

回答

2

看來外鍵還沒有在您正在使用的數據庫引擎中實現。 Why doesn't MySQL's MyISAM engine support Foreign keys?

也許考慮切換到InnoDb?

+0

我試過了,我得到了#1005 - 無法創建表'todtm-db.airport'(errno:150 )錯誤。 –

+0

在創建第二個表之前,您需要做的是創建一個索引。在apType(type)上創建索引ix; 。這是因爲你沒有引用主鍵:)然後,創建表機場。 – jmpyle771

+0

我完全忘記了我引用了主鍵以外的東西。修正它,它的工作原理,並給出適當的錯誤。謝謝 –