【问题标题】:Error 1215 Cannot add foreign key constraint错误 1215 无法添加外键约束
【发布时间】:2013-08-07 12:33:13
【问题描述】:

表货物

DROP TABLE IF EXISTS "hibernatecurso"."cargo";
CREATE TABLE  "hibernatecurso"."cargo" (
  "idcargo" int(11) NOT NULL DEFAULT '0',
  "funcao" varchar(45) DEFAULT NULL,
  PRIMARY KEY ("idcargo")
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表 EMPREGADO

DROP TABLE IF EXISTS "hibernatecurso"."empregado";
CREATE TABLE  "hibernatecurso"."empregado" (
  "idempregado" int(11) NOT NULL DEFAULT '0',
  "nome" varchar(45) NOT NULL DEFAULT '',
  "cargo" varchar(45) NOT NULL DEFAULT '',
  PRIMARY KEY ("idempregado"),
  KEY "idx_cargo" ("cargo")
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在 empregado 中创建索引

ALTER TABLE `hibernatecurso`.`empregado` ADD INDEX `idx_cargo`(`cargo`);

在 empregado 中创建 FK

ALTER TABLE `hibernatecurso`.`empregado` DROP INDEX `idx_cargo`,
 ADD INDEX `idx_cargo`(`cargo`),
 ADD CONSTRAINT `FK_empregado_cargo` FOREIGN KEY `FK_empregado_cargo` (`cargo`)
    REFERENCES `cargo` (`funcao`)
    ON DELETE CASCADE
    ON UPDATE CASCADE;

在这部分......

执行查询时出错。

ALTER TABLE `hibernatecurso`.`empregado` DROP INDEX `idx_cargo`,
 ADD INDEX `idx_cargo`(`cargo`),
 ADD CONSTRAINT `FK_empregado_cargo` FOREIGN KEY `FK_empregado_cargo` (`cargo`)
    REFERENCES `cargo` (`funcao`)
    ON DELETE CASCADE
    ON UPDATE CASCADE;

MySQL 错误号 1215 无法添加外键约束

是什么导致了错误?

【问题讨论】:

标签: mysql


【解决方案1】:

我遇到了同样的问题,我通过确保排序规则和类型在 FK 和父 PK 中匹配来解决它。

【讨论】:

    【解决方案2】:

    我可能很难阅读,但我在cargo.funcao 上没有看到任何索引。这很可能丢失了:

    ALTER TABLE `hibernatecurso`.`cargo` ADD INDEX `idx_funcao`(`funcao`);
    

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

    http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2018-04-28
      相关资源
      最近更新 更多