【问题标题】:Cannot add foreign key constraint MySQL Workbench无法添加外键约束 MySQL Workbench
【发布时间】:2017-03-18 18:00:07
【问题描述】:

我在尝试创建“订单”表时收到“错误代码:1215。无法添加外键约束”。

credit_cards 表:

CREATE TABLE credit_cards (
    customer VARCHAR(30),
    card_no CHAR(16),
    PRIMARY KEY (customer, card_no),
    FOREIGN KEY (customer) REFERENCES customers(username));

订单表:

CREATE TABLE orders (
    order_no INT AUTO_INCREMENT,
    customer VARCHAR(30) NOT NULL,
    date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    credit_card CHAR(16) NOT NULL,
    PRIMARY KEY (order_no),
    FOREIGN KEY (customer)
        REFERENCES customers (username),
    FOREIGN KEY (credit_card)
        REFERENCES credit_cards (card_no));

SHOW ENGINE INNODB STATUS的报告说问题是FOREIGN KEY (credit_card) REFERENCES credit_cards(card_no))

我已经阅读了一堆已解决的问题,但仍然无法弄清楚。我正在使用 MySQL 工作台。谢谢。

【问题讨论】:

  • 我不确定,但尝试将 credit_cards 表中的客户列设为 NOT NULL
  • @abdullah 这不是隐含的,因为它在主键中吗?
  • 是的,你是对的

标签: mysql sql foreign-keys create-table


【解决方案1】:

您需要在主键(或唯一键)关系中引用所有键。我会推荐:

CREATE TABLE credit_cards (
    credit_card_id int auto_increment primary key,
    customer VARCHAR(30),
    card_no CHAR(16),
    UNIQUE KEY (customer, card_no),
    FOREIGN KEY (customer) REFERENCES customers(username));
orders table:

CREATE TABLE orders (
    order_no INT AUTO_INCREMENT,
    customer VARCHAR(30) NOT NULL,
    date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    credit_card_id int NOT NULL,
    PRIMARY KEY (order_no),
    FOREIGN KEY (customer)
        REFERENCES customers (username),
    FOREIGN KEY (credit_card_id)
        REFERENCES credit_cards (credit_card_id));

【讨论】:

  • 啊,当然。我想我在从 ER 模型转到表时没有正确执行某个步骤,因为那样我就会有两次“用户名”。谢谢。
猜你喜欢
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2021-11-05
相关资源
最近更新 更多