当前位置: 首页 > 知识库问答 >
问题:

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

濮阳宏硕
2023-03-14

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

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

更改表person添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id)

运行此命令后,我会在mysql数据库中执行以下操作

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

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

Hibernate:如果存在person,则删除表

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

hibernate:创建表hibernate_sequence(next_val bigint)engine=myisam

hibernate:插入到hibernate_sequence值(1)中

hibernate:插入到hibernate_sequence值(1)中

Hibernate:创建表person(PER_ID bigint不为null,dob date不为null,name varchar(255)不为null,Address_Id bigint,primary key(Person_Id))Engine=MYISAM

Hibernate:alter table PERSOR add constraint FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id)

共有1个答案

鲁财
2023-03-14

谢谢@SolarFlare。它解决了我的问题。问题是MyISAM引擎不支持外键。一旦我将引擎类型更改为InnoDB,事情就像预期的那样工作了。

 类似资料:
  • 我在创建mysql数据库中现有表的外键时遇到了一些问题。 我不想创建一个名为的新表来引用它,使用以下方法: 但我发现了错误: 为了获得更多的信息,我做了: 在我看来,这两个列的类型似乎是匹配的,因为它们都是varchar(45)。(我还尝试将列设置为not null,但这没有解决问题)所以我猜问题一定是。但我不太清楚这意味着什么,也不知道如何检查/修复它。有人有什么建议吗?是什么意思?

  • 主要内容:基本语法,创建普通索引,创建唯一索引创建索引是指在某个表的一列或多列上建立一个索引,可以提高对表的访问速度。创建索引对 MySQL 数据库的高效运行来说是很重要的。 基本语法 MySQL 提供了三种创建索引的方法: 1) 使用 CREATE INDEX 语句 可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。 语法格式: CREATE <索引名> ON <表名> (<列名> [

  • 问题内容: MySQL是否自动索引外键列? 问题答案: 是的,但仅在innodb上。Innodb是当前唯一实现了外键的表格式。

  • 主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西

  • 这是我的sql文件,我得到错误后,我运行sql文件

  • 本文向大家介绍MySQL中外键的创建、约束以及删除,包括了MySQL中外键的创建、约束以及删除的使用技巧和注意事项,需要的朋友参考一下 前言 在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后