Mysql创建索引而不是外键约束

Posted

技术标签:

【中文标题】Mysql创建索引而不是外键约束【英文标题】:Mysql creates index instead of foreign key constraint 【发布时间】: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。 谢谢它解决了问题。你可以把它作为答案,我会接受的。 【参考方案1】:

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

【讨论】:

以上是关于Mysql创建索引而不是外键约束的主要内容,如果未能解决你的问题,请参考以下文章

mysql 主键索引和唯一索引的区别

MySQL笔记--- 创建表;插入,修改,删除数据;主键,外键约束;事务;索引;视图;三范式;

Linux云计算-MySQL-表操作-索引-外键-视图

mysql外键约束

MYSQL中唯一约束和唯一索引的区别

MySQL 如何添加索引