表CARGO
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 无法添加外键约束
导致错误的原因是什么?
答案 0 :(得分:2)
我可能很难阅读,但我在cargo.funcao
上看不到任何索引。这可能很遗憾:
ALTER TABLE `hibernatecurso`.`cargo` ADD INDEX `idx_funcao`(`funcao`);
InnoDB允许外键引用任何索引列或列组。 但是,在引用的表中,必须有一个 index将引用的列列为第一列的索引 同样的订单。
http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
答案 1 :(得分:0)
我遇到了同样的问题,我通过确保校对和类型在FK和父PK中都匹配来修复它。