0

为什么外键让我头疼?
首先我创建了数据库名称,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)

谢谢您的帮助

4

3 回答 3

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”必须是索引才能参考。

希望这可以帮助。

于 2013-08-26T18:39:28.313 回答
0

SQL FOREIGN KEY 约束

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

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

这在技术上允许您有 2 个条目

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 小提琴演示

于 2013-08-26T18:36:18.443 回答
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;
于 2013-08-26T18:36:50.463 回答