Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的错误1005和150_Mysql_Foreign Keys - Fatal编程技术网

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:作为一种解决方法,您可以明确指定创建表时要使用的引擎。