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

4

2 回答 2

0

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

于 2012-11-21T04:50:31.890 回答
0

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

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

正确执行演示。你也应该使用Engine=InnoDB而不是Type=InnoDB

于 2012-11-21T07:02:05.243 回答