【问题标题】:Mysql creates index instead of foreign key constraintMysql创建索引而不是外键约束
【发布时间】:2019-01-04 14:43:02
【问题描述】:

我正在尝试在两个表之间创建一个外键约束,但是在我执行了 alter 命令之后,mysql 会创建索引而不是外键。

我使用的是hibernate,所以最初我认为这是hibernate的问题,但是当我直接在mysql上执行查询时,行为是一样的。

alter table person 添加约束 FK9ircw28d19mdg5pu8yfg1qs8p 外键(Address_Id)引用地址(Address_Id)

运行此命令后,我在 mysql 数据库中得到以下信息

如您所见,约束是在索引中添加的,而不是作为外键。

Hibernate 在创建表时执行以下查询:

休眠:如果存在地址则删除表

Hibernate:如果存在 hibernate_sequence 则删除表

休眠:如果存在人则删除表

Hibernate:创建表地址(Address_Id bigint not null,addressLine1 varchar(255),addressLine2 varchar(255),city varchar(255) not null,country varchar(255) not null,state varchar(255) not null,主键 (Address_Id)) engine=MyISAM

Hibernate:创建表 hibernate_sequence (next_val bigint) engine=MyISAM

Hibernate:插入 hibernate_sequence 值 (1)

Hibernate:插入 hibernate_sequence 值 (1)

Hibernate: 创建表 person (Person_Id bigint not null, dob date not null, name varchar(255) not null, Address_Id bigint, 主键 (Person_Id)) engine=MyISAM

休眠:alter table person 添加约束 FK9ircw28d19mdg5pu8yfg1qs8p 外键(Address_Id)引用地址(Address_Id)

【问题讨论】:

  • 我到底在看什么?请发布节目创建表输出。
  • MyISAM does not support foreign keys。使用 InnoDB。
  • 谢谢它解决了问题。你可以把它作为答案,我会接受的。

标签: mysql indexing foreign-keys


【解决方案1】:

感谢@Solarflare。它解决了我的问题。问题是 MyISAM 引擎不支持外键。将引擎类型更改为 InnoDB 后,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2014-02-26
    • 2019-04-18
    • 1970-01-01
    • 2011-04-28
    • 2016-01-15
    相关资源
    最近更新 更多