【发布时间】: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