【问题标题】:create primary and foreign key relationship创建主键和外键关系
【发布时间】:2015-09-01 12:20:28
【问题描述】:

我正在尝试创建一个表名accounts。我在mysql workbench 中创建了一个可视化图表。我从图表中复制了sql command 尝试从我的命令行创建真实表,但命令行正在显示

ERROR 1215 (HY000): Cannot add foreign key constraint

这里是查询

CREATE TABLE accounts(
    account_id INT NOT NULL AUTO_INCREMENT,
    customer_id INT( 4 ) NOT NULL ,
    account_type ENUM( 'savings', 'credit' ) NOT NULL,
    balance FLOAT( 9 ) NOT NULL,
    PRIMARY KEY ( account_id ), 
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
) ENGINE=INNODB;

【问题讨论】:

  • 向我们展示您刚才所做的另一张桌子。回答最多需要 2 分钟
  • 确保客户已经存在?
  • 其实主键定义如下,不能定义多个主键且主键不为空。
  • 但问题只是外键定义
  • 必须先创建客户才能创建账户表

标签: mysql mysql-workbench


【解决方案1】:

客户表可能如下所示。它需要为父表(客户)中的列具有通用的数据类型和索引。如果列类型/索引错误,FK 将在创建子表时失败。

对于在子节点中包含预先存在数据的ALTER TABLE add constraint 命令,如果数据无效,它将失败。

顺便说一下,INT(4) 只是一个显示宽度。它仍然是一个 int。

create table customers(
    customer_id int auto_increment primary key,
    customerName varchar(100) not null
    -- other columns
);

CREATE TABLE accounts(
    account_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT( 4 ) NOT NULL ,
    account_type ENUM( 'savings', 'credit' ) NOT NULL,
    balance FLOAT( 9 ) NOT NULL,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
) ENGINE=INNODB;

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多