简体   繁体   English

无法添加外键约束4

[英]Cannot add foreign key constraint 4

Error 1215: Cannot add foreign key constraint 错误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;

I don't understand why this error appears. 我不明白为什么会出现此错误。 Please someone help... Thanks in advance.. 请有人帮助...在此先感谢..

To define a foreign key on a column its parent referenced field must be indexed. 要在列上定义foreign key ,必须为其父引用字段建立索引。

As per documentation on foreign key constraints: 根据有关foreign key约束的文档:

REFERENCES tbl_name (index_col_name,...) 参考tbl_name(index_col_name,...)

Define an INDEX on value in table proba and it should be working. 在表proba value上定义一个INDEX ,它应该可以工作。

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;

Once you define a KEY on the parent column, a foreign key column in zavisnost table can refer it, like. 一旦在父列上定义了KEYzavisnost表中的外键列就可以引用它。

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

Refer to : 参考

[CONSTRAINT [symbol]] FOREIGN KEY [CONSTRAINT [符号]]外键
[index_name] (index_col_name, ...) [index_name](index_col_name,...)
REFERENCES tbl_name (index_col_name,...) 参考tbl_name(index_col_name,...)
[ON DELETE reference_option] [ON DELETE reference_option]
[ON UPDATE reference_option] [ON UPDATE reference_option]

reference_option: reference_option:
RESTRICT | 限制| CASCADE | 级联| SET NULL | SET NULL | NO ACTION 不采取行动

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM