外键错误

时间:2013-08-26 18:30:18

标签: mysql foreign-key-relationship mysql-error-1005

为什么外键让我头疼?
首先,我创建了数据库名称colorcode,然后paper表,工作正常:

CREATE TABLE paper (
  paper_id int(20) NOT NULL,
  description VARCHAR(40) NOT NULL,
  paper_color VARCHAR(40) NOT NULL,
  PRIMARY KEY (paper_id, paper_color)
) ENGINE=InnoDB;

然后brick

CREATE TABLE brick(
  brick_id int(20) NOT NULL,
  description varchar(40) NOT NULL,
  brick_color varchar (40) NOT NULL,
  PRIMARY KEY (brick_id),
  FOREIGN KEY (brick_color) REFERENCES paper(paper_color)
) ENGINE=InnoDB;

不是=>

#1005 - Can't create table 'colorcode.brick' (errno: 150)

谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

create table paper (
  paper_id int(20) not null,
  description VARCHAR(40)not null,
  paper_color VARCHAR(40) NOT NULL,
  primary key (paper_id, paper_color),
  INDEX(`paper_color`)
)engine=InnoDB;

create table brick (
  brick_id int(20) not null,
  description varchar(40) not null,
  brick_color varchar (40) not null,
  primary key (brick_id), 

  CONSTRAINT foreign key (`brick_color`) REFERENCES  paper(`paper_color`)
)engine=InnoDB;

演示:http://sqlfiddle.com/#!2/316d9

  

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

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

“paper_color”必须是一个索引才能引用。

希望这有帮助。

答案 1 :(得分:0)

来自SQL FOREIGN KEY Constraint

  

一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY。

现在从您的脚本中,表纸上的PRIMARY KEY由paper_id,paper_color列组成,但引用它的外键,仅引用纸张(paper_color)

这技术上允许你有两个条目

paper_id    paper_color
1           blue
2           blue

它将满足表格纸张的主键约束,但不满足表格砖上的外键约束

将表纸上的主键更改为paper_color会起作用。

create table paper (
paper_id int(20) not null,
description VARCHAR(40)not null,
paper_color VARCHAR(40) NOT NULL,
primary key ( paper_color)
)engine=InnoDB;

create table brick(
brick_id int(20) not null,
description varchar(40) not null,
brick_color varchar (40) not null,
primary key (brick_id),
foreign key (brick_color) references paper(paper_color)
)engine=InnoDB

SQL Fiddle DEMO

答案 2 :(得分:0)

paper_color创建一个单独的密钥,它将起作用:

CREATE TABLE paper (
    paper_id int(20) not null,
    description VARCHAR(40)not null,
    paper_color VARCHAR(40) NOT NULL,
    PRIMARY KEY (paper_id, paper_color),
    KEY (paper_color)
) ENGINE=InnoDB;