无法添加第二个FK:得到错误无法创建表'.jobstatus \ #sql-32c_12f2f.frm'(错误号:150)

时间:2012-11-21 04:05:20

标签: mysql mysql-error-1005

     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 front 3.2管理数据库,我可以添加第一个fk但是当我添加第二个fk时我得到了一个错误: sql执行错误#1005。来自数据库的响应:无法创建table'.jobstatus#sql-32c_12f2f.frm'(错误号:150)。我已经为fk subjobId引用subjob表定义了新的索引,可能出现这个错误的可能性?谢谢

2 个答案:

答案 0 :(得分:0)

检查主表和引用表上 subjobId 列的数据类型和大小。两者必须相同才能创建外键。

答案 1 :(得分:0)

答案是:您不能引用尚未创建的列/表。尝试在引用的表之后执行具有外键的表。

显然,你应该在外键和引用列的数据类型中保持一致

Correct Execution Demo。另外,您应该使用Engine=InnoDB代替Type=InnoDB