使用alter命令将外键添加到复合主键时显示错误1215

时间:2013-11-03 18:11:38

标签: mysql

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

以下是三个表格:

表a:

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可以由其他人引用但不是a。

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):无法添加外键约束

  

请帮助我......我花了一整天......但我找不到为什么会这样......

2 个答案:

答案 0 :(得分:0)

  

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

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

答案 1 :(得分:-1)

这是使用oracle_ express_11eg软件的alter命令的creted外键图像。我在这里做了什么,我做了两个表名测试和学生。测试表由测试ID,名称等组成,学生表再次由id,name等组成,在两个表中,id使用命令"主键(id)"命名为主键。然后我写命令" alter table test,添加外键(id),引用学生(id);"创造外键,不是那么简单吗?