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创建索引而不是外键约束的主要内容,如果未能解决你的问题,请参考以下文章