2014-11-05 80 views
0

我试图在mySQL中为many to many关系创建表。这是sql它:试图为多对多关系创建表时mySQL

CREATE TABLE `directoryprogrammetags` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `directoryprogramme_id` INT(11) NOT NULL, 
    `tag_id` INT(11) NOT NULL, 
    `description` TEXT, 
    `created` DATETIME DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`directoryprogramme_id`) REFERENCES directoryprogramme(id), 
    FOREIGN KEY (`tag_id`) REFERENCES tag(id) 
) ENGINE=INNODB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8; 

但我收到此错误:

Error Code: 1005 
Can't create table 'mytestdatabase.directoryprogrammetags' (errno: 150) 

的外键引用的表是:

CREATE TABLE `directoryprogramme` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(250) NOT NULL, 
    `description` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=1200 DEFAULT CHARSET=utf8 

CREATE TABLE `tag` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(200) DEFAULT NULL, 
    `description` text, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 

我读过som它可能是与外键不一致的地方,但我不确定。任何人都可以帮我解决这个问题吗?

+0

也许这将有助于:http://stackoverflow.com/questions/16227199/mysql-errno-150 – 2014-11-05 16:05:34

回答

1

错误是因为您引用的directoryprogramme表是使用与其余表(InnoDB)不同的引擎(MyISAM)创建的。如果你改变了引擎,因此它使用的是同一则错误消失:

CREATE TABLE `directoryprogramme` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(250) NOT NULL, 
    `description` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1200 DEFAULT CHARSET=utf8; 
     ^^^^^ This is the difference 

可以在this sqlfiddle检查它,当您使用此代码

+0

这解决了我的问题,我完全错过了。谢谢。 – Javacadabra 2014-11-05 16:08:54

0

不能使用外键从InnoDB的在MyISAM工作。将directoryprogramme上的数据库引擎更改为InnoDB,我敢打赌它会起作用。