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.*
部分并查看是否仍然存在错误?它刚刚起作用!非常感谢您给我上了一堂新课。