MySQL对两个不同的表列使用相同的外键

时间:2017-06-24 07:07:22

标签: mysql mariadb

我发现这个帖子类似于我的查询 How to Link Foreign Key with Different Name 但不幸的是,答案是,我的问题没有得到解决。在我的表示例中,它不会创建任何主键。仅限所有外键。

以下是代码:

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"第2位为" 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
  );

1 个答案:

答案 0 :(得分:2)

好的,在尝试创建ref_data表时,在外键错误之后,我看到了这一点:

  

最新的外键错误

     

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

     

FOREIGN KEY(ref_name)REFERENCES client(firstname)):

     

无法找到索引   引用的列,其中引用的列显示为第一个   表中的列或列类型以及引用的表中没有   匹配约束。请注意ENUM的内部存储类型和   在使用> = InnoDB-4.1.12创建的表中更改了SET,以及此类列   在旧表中,新表中的这些列不能引用它们。看到   http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html   用于正确的外键定义。创建表格“testref_data”   外键约束失败。 没有索引   引用的列,其中引用的列显示为作为第一个   'FOREIGN KEY(ref_name)REFERENCES client(firstname)''附近的列。

该错误基本上是这样说的:(粗体文字)

  

'client'表的'firstname'没有索引(FOREIGN KEY的REFERENCES子句之后的部分

但这是一个简单的修复。在客户端表上运行此SQL:

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

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