我发现这个帖子类似于我的查询 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
);
答案 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 用于正确的外键定义。创建表格“
test
。ref_data
” 外键约束失败。 没有索引 引用的列,其中引用的列显示为作为第一个 'FOREIGN KEY(ref_name)REFERENCES client(firstname)''附近的列。
该错误基本上是这样说的:(粗体文字)
'client'表的'firstname'没有索引(FOREIGN KEY的REFERENCES子句之后的部分
但这是一个简单的修复。在客户端表上运行此SQL:
ALTER TABLE `client` ADD INDEX(`firstname`);
...然后再次运行ref_data表SQL。