2012-05-07 74 views
0

我想在MySQL上使用SQL腳本創建一個表,並且MySQL數據庫不斷給我提供錯誤150.我已經在Navicat和MySQL Workbench中嘗試了以下代碼,並且都給出了150錯誤。錯誤(150)由SQL腳本生成?

看來這是一個外鍵問題,但我實際上看不到我的代碼存在什麼問題,並且想知道是否有更多的經驗豐富的DB用戶會對這個問題有所暗示?

SET FOREIGN_KEY_CHECKS=0; 
CREATE TABLE `network_invites` (
`invite_ID` int(11) NOT NULL AUTO_INCREMENT, 
`invite_From` int(11) NOT NULL, 
`invite_Network` int(11) NOT NULL, 
`invite_NetCreator` int(11) NOT NULL, 
`invite_Message` varchar(256) NOT NULL, 
`invite_Date` date DEFAULT NULL, 
PRIMARY KEY (`invite_ID`), 
KEY `invite_From` (`invite_From`), 
KEY `invite_Network` (`invite_Network`), 
KEY `invite_NetCreator` (`invite_NetCreator`), 
CONSTRAINT `network_invites_ibfk_1` FOREIGN KEY (`invite_From`) REFERENCES `users`  (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `network_invites_ibfk_2` FOREIGN KEY (`invite_Network`) REFERENCES `networks` (`network_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `network_invites_ibfk_3` FOREIGN KEY (`invite_NetCreator`) REFERENCES `networks` (`network_Creator`) ON DELETE CASCADE ON UPDATE CASCADE 
)ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1; 

我不能看到FK問題是什麼,這些字段確實存在於數據庫中,它們具有相同的數據類型。

感謝您的任何幫助。

+0

它們都是int(11)嗎? – raina77ow

+0

3個FK必須與相關表中的完全相同,即'int(11)NOT NULL'。如果這些定義在相關表中有所不同,您將得到150 err。 –

+0

邁克爾測試我創建了具有完全相同名稱/類型的虛擬表,然後嘗試創建表network_invites,但仍然收到150錯誤 – Satya

回答

0

我認爲解決方法是:

  1. 創建該表的約束

  2. 添加約束

再次使用ALTER TABLE,這是一個解決辦法,並會喜歡聽到@ mysql的人或更有經驗的人

0

確保2個表類型都是InnoDB。還要確保你的主鍵和外鍵都是無符號的。

使用「設計表」選項可以在NaviCat中更改所有這些設置。

我已經遇到過這個問題很多次了,而且這個技巧在99%的時間內完成了。

0

您需要在users.user_IDnetworks.network_IDnetworks.network_Creator上有索引,並且列的類型應該與network_invites表中的完全相同。

0

的問題是一個錯字:

CONSTRAINT `network_invites_ibfk_2` 
    FOREIGN KEY (`invite_Network`) 
    REFERENCES `networks` (`network_ID`)  ---<--- either here 
    ON DELETE CASCADE ON UPDATE CASCADE, 

CONSTRAINT `network_invites_ibfk_3` 
    FOREIGN KEY (`invite_NetCreator`) 
    REFERENCES `networks` (`network_Creator`) ---<--- or here (more probable) 
    ON DELETE CASCADE ON UPDATE CASCADE 

networks表的主鍵可能是network_ID,而不是network_Creator