无法创建外键(ERROR 1072)

时间:2012-06-30 23:07:59

标签: mysql sql foreign-keys primary-key

我有一张看起来像这样的表:

mysql>  SHOW COLUMNS FROM Users;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| user_id    | int(10)      | NO   | PRI | NULL    | auto_increment |
| username   | varchar(50)  | YES  |     | NULL    |                |
| password   | varchar(255) | YES  |     | NULL    |                |
| email      | varchar(255) | YES  |     | NULL    |                |
| phone      | varchar(255) | YES  |     | NULL    |                |

我正在尝试创建一个这样的新表:

create table jobs (id int,  FOREIGN KEY (user_id) REFERENCES Users(user_id)) ENGINE=INNODB;

但是我收到了这个错误:

ERROR 1072 (42000): Key column 'user_id' doesn't exist in table

我确信我遗漏了一些非常基本的东西。

4 个答案:

答案 0 :(得分:5)

试试这个:

create table jobs (
    id int,  
    user_id int,
    FOREIGN KEY (user_id) REFERENCES Users(user_id)
) ENGINE=INNODB;

外键约束中的第一个user_id是指定义约束的表,第二个是指它所指向的表。 因此,您在作业表中也需要一个字段user_id

答案 1 :(得分:3)

这是您需要的脚本:

CREATE TABLE jobs
(
    id int NOT NULL,
    user_id int NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (user_id) REFERENCES Users(user_id)
)

以下是学习设置关系的基础知识的一个很好的参考:SQL FOREIGN KEY Constraint

答案 2 :(得分:0)

  

您正试图将FOREIGN KEY定义为查询中不存在的列。

这就是为什么您收到Key column 'user_id' doesn't exist in table

的原因

观察您的查询:

 create table jobs (
 id int,
 FOREIGN KEY (user_id) REFERENCES Users(user_id)
) ENGINE=INNODB;

如其他答案所示:

  

您必须定义新表的列的创建,这将是另一个表中PK的FK

 create table jobs (
 id int,
 user_id int NOT NULL
 FOREIGN KEY (user_id) REFERENCES Users(user_id)
 ) ENGINE=INNODB;

答案 3 :(得分:0)

创建表出勤:

CREATE TABLE tbl_attendance
(
attendence_id INT(100) NOT NULL,
presence varchar(100) NOT NULL,
reason_id varchar(100) NULL,
PRIMARY KEY (attendance_id)
);