Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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
Php 无法在Mysql上创建表errno:150_Php_Mysql_Mysql Error 1005 - Fatal编程技术网

Php 无法在Mysql上创建表errno:150

Php 无法在Mysql上创建表errno:150,php,mysql,mysql-error-1005,Php,Mysql,Mysql Error 1005,我在mysql上得到了另一个Errno150。我已经看了表引擎,列类型,但没有运气,在我看来它没有错 这次我错在哪里 创建与image_tag和tag_lang相关的标记表时出错 -- ----------------------------------------------------- -- Table `ratna`.`image_tag` -- ----------------------------------------------------- DROP TABLE IF EXI

我在mysql上得到了另一个Errno150。我已经看了表引擎,列类型,但没有运气,在我看来它没有错

这次我错在哪里

创建与image_tag和tag_lang相关的标记表时出错

-- -----------------------------------------------------
-- Table `ratna`.`image_tag`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `ratna`.`image_tag` ;

CREATE  TABLE IF NOT EXISTS `ratna`.`image_tag` (
  `id` INT(11) NOT NULL ,
  `tag` INT(11) NOT NULL ,
  PRIMARY KEY (`id`, `tag`) ,
  INDEX `image_fk` (`id` ASC) ,
  CONSTRAINT `image_fk`
    FOREIGN KEY (`id` )
    REFERENCES `ratna`.`image` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `ratna`.`tag_lang`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `ratna`.`tag_lang` ;

CREATE  TABLE IF NOT EXISTS `ratna`.`tag_lang` (
  `id` INT(11) NOT NULL ,
  `lang` INT(20) NOT NULL ,
  `tag_desc` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
  PRIMARY KEY (`id`, `lang`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;


-- -----------------------------------------------------
-- Table `ratna`.`tag`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `ratna`.`tag` ;

CREATE  TABLE IF NOT EXISTS `ratna`.`tag` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
  `seq` INT(11) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `image_tag_fk` (`id` ASC) ,
  INDEX `tag_lang` (`id` ASC) ,
  CONSTRAINT `image_tag_fk`
    FOREIGN KEY (`id` )
    REFERENCES `ratna`.`image_tag` (`tag` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `tag_lang`
    FOREIGN KEY (`id` )
    REFERENCES `ratna`.`tag_lang` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 13
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

mysql错误150的第一个google结果显示:

如果重新创建已删除的表,则该表的定义必须符合引用该表的外键约束。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150

如果MySQL报告CREATETABLE语句中的错误号1005,并且错误消息指向错误150,则表创建失败,因为外键约束的格式不正确。类似地,如果ALTER表失败并且它引用了错误150,这意味着将为被修改的表错误地形成外键定义。您可以使用ShowEngine INNODB STATUS来显示服务器中最近的INNODB外键错误的详细说明


mysql错误150的第一个google结果显示:

如果重新创建已删除的表,则该表的定义必须符合引用该表的外键约束。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150

如果MySQL报告CREATETABLE语句中的错误号1005,并且错误消息指向错误150,则表创建失败,因为外键约束的格式不正确。类似地,如果ALTER表失败并且它引用了错误150,这意味着将为被修改的表错误地形成外键定义。您可以使用ShowEngine INNODB STATUS来显示服务器中最近的INNODB外键错误的详细说明

这是:

    REFERENCES `ratna`.`image_tag` (`tag` )
无效,因为
image\u标记
没有任何以
标记
开头的索引。如前所述:

InnoDB
允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列

(“本例中引用的表”是
image\u tag
,而“引用的列”只是
tag

这:

    REFERENCES `ratna`.`image_tag` (`tag` )
无效,因为
image\u标记
没有任何以
标记
开头的索引。如前所述:

InnoDB
允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列


(“本例中引用的表”是
image\u tag
,“引用的列”只是
tag

在我的案例中,它是

外键(表\u列\u名称\u小写)引用 主关键字表大写(表列小写)

因为我的主键表是小写的,所以我将这个大写外键引用从

*大写的主键表*

*小写字母中的主键表*


在我的情况下,它起了作用,这是一个问题

外键(表\u列\u名称\u小写)引用 主关键字表大写(表列小写)

因为我的主键表是小写的,所以我将这个大写外键引用从

*大写的主键表*

*小写字母中的主键表*


它成功了

我明白了。在引用表中找不到引用列作为第一列出现的索引,或者该表中的列类型与引用表中的列类型不匹配。请注意,ENUM和SET的内部存储类型在使用>=InnoDB-4.1.12创建的表中已更改,并且旧表中的这些列不能被新表中的这些列引用。这是否意味着,我不能将主键引用到其他表?我明白了。在引用表中找不到引用列作为第一列出现的索引,或者该表中的列类型与引用表中的列类型不匹配。请注意,ENUM和SET的内部存储类型在使用>=InnoDB-4.1.12创建的表中已更改,并且旧表中的这些列无法被新表中的这些列引用。这是否意味着我无法将主键引用到其他表?im丢失,这是否意味着我需要在表
image\u-tag
中的
tag
上添加索引?这意味着您试图定义一个引用
image\u-tag(tag)
的外键,而在
image\u-tag(tag)
上没有索引。因此,您需要放弃使用外键,或者需要以某种方式更改其定义,或者需要在
image\u标记(tag)
image\u标记(tag)
上添加索引。如果不了解更多关于您的应用程序的信息,我就无法告诉您哪一个是正确的选择。我迷路了,这是否意味着我需要在表
image\u-tag
中的
tag
上添加索引?这意味着您试图定义一个引用
image\u-tag(tag)
的外键,而在
image\u-tag(tag)
上没有索引。因此,您需要放弃使用外键,或者需要以某种方式更改其定义,或者需要在
image\u标记(tag)
image\u标记(tag)
上添加索引。如果不了解你的申请,我无法告诉你哪一个是正确的选择。