无法添加外键约束4

时间:2014-04-03 23:39:14

标签: mysql innodb

错误1215:无法添加外键约束

CREATE TABLE IF NOT EXISTS `mydb`.`proba` (
  `key` VARCHAR(255) NOT NULL,
  `value` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`key`, `value`))
ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS `mydb`.`zavisnost` (
  `key` VARCHAR(255) NOT NULL,
  `value` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`key`, `value`),
  CONSTRAINT `fk_zavisnost_proba1`
    FOREIGN KEY (`key`)
    REFERENCES `mydb`.`proba` (`value`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

我不明白为什么会出现此错误。请有人帮忙......提前致谢..

1 个答案:

答案 0 :(得分:0)

要在列上定义foreign key,必须将其父引用字段编入索引。

根据foreign key约束的文档:

  

REFERENCES tbl_name(index_col_name,...)

在表INDEX中的value上定义proba,它应该正常运行。

CREATE TABLE IF NOT EXISTS `mydb`.`proba` (
  `key` VARCHAR(255) NOT NULL,
  `value` VARCHAR(255) NOT NULL,

  KEY ( `value` ), -- <-------- this line was missing

  PRIMARY KEY (`key`, `value`))
ENGINE = InnoDB;

在父列上定义KEY后,zavisnost表中的外键列可以引用它,例如。

...
FOREIGN KEY (`key`)
REFERENCES `mydb`.`proba` (`value`)
...

请参阅

  

[CONSTRAINT [symbol]] FOREIGN KEY
      [index_name](index_col_name,...)
      参考文献tbl_name(index_col_name,...)
      [ON DELETE reference_option]
      [ON UPDATE reference_option]

     

reference_option:
      限制| CASCADE | SET NULL |没有行动