-1

我使用了不同的数据库和表,而不是我得到错误的表,但错误仍然存​​在......

以下是三张表:

表一:

create table a(q int,w int,primary key(q,w));//IMPORTANT:q then w

q 和 w 形成复合主键。

表 b:

create table b(e int,r int);

表3:

create table c(t int,y int);

alter table b add foreign key(e) references a(q);
Query OK, 0 rows affected (0.16 sec)

这个 alter 命令使 e 作为表 a('first' 主键)的 q 的外键。

如果我尝试将另一个属性作为第二个主键即“w”的外键,则会显示错误 1215

alter table c add foreign key(t) references a(w);

ERROR 1215 (HY000): 无法添加外键约束

为什么不将't'作为'SECOND'主键即'w'的外键。“我可以将它们中的任何一个作为第一个主键(q)的外键,但它们都不能作为第二个主键(w)”。

这可能会令人困惑,但是当我在创建表 a 时仅通过将 (q,w) 更改为 (w,q) 删除并再次创建所有它们时,w 可以被其他人引用,但不能被其他人引用。

create table a(q int,w int,primary key(w,q)); 
alter table c add foreign key(t) references a(w);
Query OK, 0 rows affected (0.16 sec)

alter table b add foreign key(e) references a(q);

ERROR 1215 (HY000): 无法添加外键约束

请帮助我..我花了一整天的时间..但我找不到它发生的原因...

4

2 回答 2

0

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

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

于 2013-11-03T18:34:45.513 回答
-1

这是使用 oracle_express_11eg 软件使用 alter 命令创建的外键的图像。我在这里真正做了什么,我做了两个表名测试和学生。测试表由测试 id、name 等组成,学生表再次由 id、name 等组成,并且在这两个表中,id 使用命令“primary key(id)”命名为主键,然后我编写命令“alter table test ,添加外键(id),引用学生(id);" 创建外键,是不是很简单?

于 2016-08-29T06:16:11.280 回答