【问题标题】:Unable to create Foreign Key (ERROR 1072)无法创建外键(错误 1072)
【发布时间】:2012-07-01 23:05:57
【问题描述】:

我有一个如下所示的表格:

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

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

【问题讨论】:

  • jobs 中没有列 user_id...
  • 不应该在创建作业表的过程中创建它吗?
  • 你不是在创建它,你需要指定列名和数据类型,以便外键可以使用。

标签: mysql sql foreign-keys primary-key


【解决方案1】:

这是你需要的脚本:

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】:

    试试这个:

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

    外键约束中的第一个user_id指的是定义约束的表,第二个指的是它指向的表。 所以你的工作表中也需要一个字段user_id

    【讨论】:

    • MongoDB 宠坏了我 :) 我假设 MySQL 会在它不存在时创建密钥
    【解决方案3】:

    您正在尝试将其定义为 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;
    

    【讨论】:

      【解决方案4】:

      创建表考勤:

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

      【讨论】:

      • 这张表和问题有什么关系? OP 在添加表 jobs 时遇到问题,并且有其他类似 Users 的表与出勤有何关系?
      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2020-08-07
      • 2010-11-26
      相关资源
      最近更新 更多