2017-06-24 45 views
-2

我发现此线程类似于我的查询 How to Link Foreign Key with Different Name 但不幸的是,与答案,我的问题没有得到解决。就我的表格示例而言,它不会创建任何主键。所有外键只。MySQL使用相同的外键为两个不同的表列

下面是代码:

CREATE TABLE ref_data(
user_id INT(11) NOT NULL, 
ref_id INT(11) NOT NULL, 
ref_name VARCHAR(30) NOT NULL, 
ref_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
CONSTRAINT FK_user_id FOREIGN KEY(user_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_id FOREIGN KEY(ref_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_name FOREIGN KEY(ref_name) REFERENCES client (firstname) 
); 

它给我:

错误号:150 “外键约束的格式不正确”

这里我使用USER_ID两次第一个为“user_id”,第二个为“ref_id”。还使用firstname作为“ref_name”。

客户表:

CREATE TABLE client (
    `user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `username` VARCHAR(30) NOT NULL UNIQUE KEY, 
    `email` VARCHAR(50) NOT NULL UNIQUE KEY, 
    `firstname` VARCHAR(30) NOT NULL, 
    `lastname` VARCHAR(30) NOT NULL, 
    `password` CHAR(128) NOT NULL 
); 
+0

您可以在得到该错误之后运行'SHOW ENGINE InnoDB STATUS'获取更多信息。 –

+0

我运行它显示如下: ===================================== 2017-07- 13 ... – mimi

+0

可以肯定的是,在外键错误之后立即检查了它? –

回答

2

好吧,试图创建ref_data表时,外键错误之后,我看到:

国外最新KEY ERROR

- ---------------------- 2017-07-13 01:07:00 37ec表ref_data的外键约束出错:

外键(ref_name)参考客户(姓)):

找不到在 引用表在表中的索引,其中引用的列显示为第一个 列或列类型和引用表不 匹配约束。请注意,ENUM和 SET的内部存储类型在使用> = InnoDB-4.1.12创建的表中进行了更改,旧表中的这样的列 不能被新表中的这些列引用。有关正确的外键定义,请参阅 http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html 。创建表'testref_data' 与外键约束失败。 被引用表中没有索引,其中引用的列出现在'FOREIGN KEY(ref_name)REFERENCES client(firstname)'''附近的第一个 列'''。

什么的错误基本上是说:(以粗体显示)

没有为“客户”表(的参考一节后的部分上“姓”没有索引FOREIGN KEY

但它是一个简单的修补程序运行此SQL的客户表:

ALTER TABLE `client` ADD INDEX(`firstname`); 

...然后再次运行ref_data表SQL。

+0

它刚刚工作!非常感谢你为我教授新课程。 – mimi

相关问题