2012-11-21 22 views
-1
 CREATE TABLE `job` (
    `jobId` int(11) NOT NULL auto_increment, 
    `jobcode` varchar(25) default NULL, 
    `jobname` varchar(255) default NULL, 
    `location` varchar(255) default NULL, 
    `budget` int(10) unsigned default NULL, 
    `year_type` varchar(100) default NULL, 
    `worklineId` int(11) default NULL, 
    PRIMARY KEY (`jobId`), 
    KEY `NewIndex` (`worklineId`), 
    FOREIGN KEY (`worklineId`) REFERENCES `workline` (`worklineId`) 
    ) TYPE=InnoDB; 

    CREATE TABLE `subjob` (
    `subjobId` int(11) NOT NULL auto_increment, 
    `subjobcode` varchar(25) default NULL, 
    `subjobname` varchar(255) default NULL, 
    `subjobbudget` int(11) unsigned default NULL, 
    `jobgoal_date` date default '0000-00-00', 
    `jobId` int(11) default NULL, 
    PRIMARY KEY (`subjobId`), 
    KEY `NewIndex` (`jobId`), 
    FOREIGN KEY (`jobId`) REFERENCES `job` (`jobId`) 
    ) TYPE=InnoDB; 

    CREATE TABLE `contract` (
    `contractId` int(11) NOT NULL auto_increment, 
    `contractcode` varchar(25) default NULL, 
    `price` int(11) unsigned default NULL, 
    `contractprice` int(11) unsigned default NULL, 
    `company` varchar(50) default NULL, 
    `signdate` date default '0000-00-00', 
    `begindate` date default '0000-00-00', 
    `enddateplan` date default '0000-00-00', 
    `note` text, 
    PRIMARY KEY (`contractId`) 
    ) TYPE=InnoDB; 


    CREATE TABLE `subjob_contract` (
    `subjobcontractId` int(11) NOT NULL auto_increment, 
    `status` varchar(11) default NULL, 
    `contractId` int(11) default NULL, 
    `subjobId` int(11) default NULL, 
    PRIMARY KEY (`subjobcontractId`), 
    KEY `NewIndex` (`contractId`), 
    KEY `NewIndex2` (`subjobId`), 
    FOREIGN KEY (`contractId`) REFERENCES `contract` (`contractId`) 
    ) TYPE=InnoDB 

我米用mysql前3.2至管理數據庫,我可以添加第一FK但當我添加第二個fk時,出現以下錯誤: sql執行錯誤#1005。來自數據庫的響應:無法創建table'.jobstatus#sql-32c_12f2f.frm'(errno:150)。我已經爲fk subjobId引用subjob表定義了新的索引,這個錯誤的可能性是什麼?謝謝不能添加第二FK:得到了錯誤不能創建table'.jobstatus #SQL-32c_12f2f.frm」(錯誤:150)

+0

這裏使用的jobstatus表在哪裏?在這裏描述jobstatus表格。 – gks

+0

你的工作桌在哪裏。我試圖一步步執行你的表模式,並在'FOREIGN KEY('jobId')REFERENCES'job'('jobId')'中發現問題。分享你的工作表 – Sami

+0

@Sami:我的工作表有問題嗎? – shushu

回答

0

檢查主表和被引用表上的子作業列的數據類型和大小。兩者必須相同,否則將允許您創建外鍵。

+0

yaa他們是相同的類型和大小,但它想知道,我不能添加第二個FK。當我嘗試添加subjobId第一,它可以然後我不能爲第二個FK添加contractId。所以我可以得出結論,它有錯誤,當我添加第二個FK – shushu

+0

不,我們可以添加更多的FKs,因爲我們需要。把你的問題中與你有關的所有表的創建表腳本放到你的問題中。檢查參考表是否爲空。 –

+0

我把相關表。請檢查我,提前謝謝 – shushu

0

答案是:你不能引用那個尚未創建的列/表。嘗試在引用的表之後執行具有外鍵的表。

很明顯,你應該有外鍵的數據類型和引用列以及

Correct Execution Demo一致性。你也應該使用Engine=InnoDB而不是Type=InnoDB

+0

但是使用type而不是引擎時沒有問題,當我在表中只添加1個FK時,無論如何謝謝 – shushu

+0

好的,我會再次重新檢查非常感謝 – shushu