MySQL中的错误1005和150
我有两张桌子MySQL中的错误1005和150,mysql,foreign-keys,Mysql,Foreign Keys,我有两张桌子 CREATE TABLE `languages` ( `language_id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `language_abbrv` char(2) NOT NULL, `language_english` varchar(45) NOT NULL, `language_local` varchar(45) NOT NULL, PRIMARY KEY (`language_id`), U
CREATE TABLE `languages` (
`language_id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
`language_abbrv` char(2) NOT NULL,
`language_english` varchar(45) NOT NULL,
`language_local` varchar(45) NOT NULL,
PRIMARY KEY (`language_id`),
UNIQUE KEY `language_id_UNIQUE` (`language_id`),
UNIQUE KEY `language_abbrv_UNIQUE` (`language_abbrv`),
UNIQUE KEY `language_name_UNIQUE` (`language_english`),
UNIQUE KEY `language_local_UNIQUE` (`language_local`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
CREATE TABLE `layouts` (
`layout_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`platform_id` tinyint(3) unsigned NOT NULL,
`language_id` tinyint(1) unsigned NOT NULL,
`layout_name` varchar(45) NOT NULL,
PRIMARY KEY (`layout_id`),
UNIQUE KEY `layout_id_UNIQUE` (`layout_id`),
KEY `idx_layouts_platform_id` (`platform_id`),
CONSTRAINT `fk_layouts_platform_id` FOREIGN KEY (`platform_id`) REFERENCES `platforms` (`platform_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
当我尝试在“language_id”列上引用“languages”的“layouts”上创建外键时,我不断得到一个“ERROR 1005:cannotcreate table(errno:150)”错误。我看不出问题出在哪里,错误也没有告诉我多少。我做错了什么
当我试图在“layouts”上创建一个外键,引用“language_id”列上的“languages”时,我不断得到一个[…]错误
首先:您向我们展示的脚本实际上并没有尝试创建该外键
但无论如何:如果是,那么它将失败,因为您的表使用不同的MySQL引擎:语言使用MyISAM
,而布局使用InnoDB
。两个表必须使用相同的引擎才能创建外键
(您可以将第一个表的引擎更改回MyISAM
,以生成错误)
:
父表和子表必须使用相同的存储引擎,并且不能将它们定义为临时表
除了GMB的回答之外,如果您试图创建您的语言id的外键,请添加此脚本
CONSTRAINT `fk_layouts_language_id` FOREIGN KEY (`language_id`) REFERENCES `languages` (`language_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
假设您已经创建了平台表(同一引擎=InnoDb)
,您可以使用下面的脚本
CREATE TABLE `layouts` (
`layout_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`platform_id` tinyint(3) unsigned NOT NULL,
`language_id` tinyint(1) unsigned NOT NULL,
`layout_name` varchar(45) NOT NULL,
PRIMARY KEY (`layout_id`),
UNIQUE KEY `layout_id_UNIQUE` (`layout_id`),
KEY `idx_layouts_platform_id` (`platform_id`),
CONSTRAINT `fk_layouts_language_id` FOREIGN KEY (`language_id`) REFERENCES `languages` (`language_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_layouts_platform_id` FOREIGN KEY (`platform_id`) REFERENCES `platforms` (`platform_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
请参阅。请共享您的平台
表创建脚本当我尝试在“语言id”列上引用“语言”的“布局”上创建外键时:您的脚本实际上没有尝试这样做。请向我们展示您的尝试。MySQL Workbench在创建新表时默认使用MyISAM。我必须研究如何停止此操作。@posfan12:作为一种解决方法,您可以明确指定创建表时要使用的引擎。