尝试为多对多mySQL创建表时出现问题

时间:2014-11-05 15:54:05

标签: mysql sql

我正在尝试在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

我在某处读到可能与外键不一致但我不确定。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 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,我敢打赌它会工作。