【问题标题】:Mysql Foreign keys error 150Mysql外键错误150
【发布时间】:2013-03-03 07:24:11
【问题描述】:

我是 mysql 初学者,目前正在研究外键。 我想创建三个表:用户、项目、订单并将它们链接在一起

用户表:

CREATE TABLE users (
user_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(user_id)
);

项目表:

CREATE TABLE items (
item_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(item_id)
);

订单表:

CREATE TABLE orders (
order_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
item_id INT,
quantity INT(10) NOT NULL,
user_id INT,
PRIMARY KEY (order_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
FOREIGN KEY (user_id) REFERENCES users (user_id)
);

但我收到错误 1005: can't create table 'new.orders' (error:150)

我的代码有什么问题?

谢谢!

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    主表列和引用表列的数据类型必须完全匹配。在您的定义中,items.item_idINT UNSIGNED,而外键 orders.item_idINT(隐含 SIGNED)。 user_id 也是如此。

    如下更改定义,为这两个添加UNSIGNED

    CREATE TABLE orders (
      order_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
      item_id INT UNSIGNED,
      quantity INT(10) NOT NULL,
      user_id INT UNSIGNED,
      PRIMARY KEY (order_id),
      FOREIGN KEY (item_id) REFERENCES items (item_id),
      FOREIGN KEY (user_id) REFERENCES users (user_id)
    );
    

    然后它会正确构建:http://sqlfiddle.com/#!2/cfab8

    【讨论】:

      【解决方案2】:

      items 表中没有 student_id 列。你是说 users 表中的 user_id 吗?

      【讨论】:

        猜你喜欢
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 2011-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多