我正在尝试在many to many
中为mySQL
关系创建一个表格。这是它的sql
:
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
我在某处读到可能与外键不一致但我不确定。任何人都可以帮我解决这个问题吗?
答案 0 :(得分: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它是否有效
答案 1 :(得分:0)
您不能使用InnoDB中的外键到MyISAM。将directoryprogramme
上的数据库引擎更改为InnoDB,我敢打赌它会工作。