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

MySQL对两个不同的表列使用相同的外键,mysql,mariadb,Mysql,Mariadb,我发现这个线程与我的查询类似 但不幸的是,有了答案,我的问题没有得到解决。在我的表示例中,它不创建任何主键。仅限所有外键 代码如下: 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 FO

我发现这个线程与我的查询类似 但不幸的是,有了答案,我的问题没有得到解决。在我的表示例中,它不创建任何主键。仅限所有外键

代码如下:

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“外键约束格式不正确”

在这里,我使用用户id两次,第一次作为“用户id”,第二次作为“参考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
  );

好的,当尝试创建ref_数据表时,在外键错误之后,我看到:

最新外键错误

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

外键(ref_name)引用客户端(firstname)):

在中找不到索引 引用的表,其中引用的列显示为第一列 表和引用表中的列或列类型不存在 匹配约束。请注意,枚举和 在使用>=InnoDB-4.1.12创建的表和此类列中设置已更改 新表中的列无法引用旧表中的列。看见 获取正确的外键定义。创建表“
test
ref\u data
” 使用外键约束失败列表中没有索引 引用列作为第一列出现的引用表 “外键(ref_name)引用客户端(firstname))”附近的列

这个错误的基本意思是:(粗体)

“client”表的“firstname”上没有索引(外键的REFERENCES子句之后的部分

但这是一个简单的修复方法。在客户机表上运行以下SQL:

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

…然后再次运行ref_数据表SQL。

获取该错误后,您可以运行
显示引擎InnoDB状态
以了解更多信息。我运行它显示以下内容:===================================================================================================2017-07-13…可以肯定的是,在外键错误后立即检查了该状态?是的,正好在外键错误后。您可以尝试吗通过删除
约束FK.*
部分并查看是否仍然存在错误?它刚刚起作用!非常感谢您给我上了一堂新课。