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

MySQL使用外键创建模式抛出错误1215

连鸿
2023-03-14

我在MySQL中创建了以下三个表的基本模式,其中一个表有两个外键(documentreference表):

-- Dumping database structure
CREATE DATABASE IF NOT EXISTS `zeus`;
USE `zeus`;

-- ****** FHIR RESOURCES ******
CREATE TABLE IF NOT EXISTS `patients` 
(
    `Id` int(5) NOT NULL AUTO_INCREMENT,
    `Active` bool,
    `Name` JSON, -- JSON blob array of HumanName DataTypes
    `Telecom` JSON, -- JSON blob array of ContactPoint DataTypes
    `Gender` varchar(10),
    `BirthDate` datetime,
    `DeceasedBoolean` bool,
    `DeceasedDateTime` datetime,
    `Address` JSON, -- JSON array of Address DataTypes
    `MaritalStatus` JSON, -- JSON blob single CodeableConcept DataType
    `MultipleBirthBoolean` bool,
    `MultipleBirthInteger` int(5),
    `Communication` JSON, -- JSON array of languages & preferred bool i.e "[language: CodeableConcept(English), preferred: true, ...]"
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `documentreferences` 
(
    `Id` int(5) NOT NULL AUTO_INCREMENT,
    `Status` varchar(50),
    `DocStatus` varchar(50),
    `Type` JSON, -- single CodeableConcept DataType
    `Class` JSON, -- single CodeableConcept DataType
    `Created` datetime,
    `Indexed` datetime, 
    `Description` varchar(50),
    `SecurityLabel` JSON, -- array of CodeableConcept DataTypes
    `ContextEvent` JSON, -- array of CodeableConcept DataTypes
    `ContextPeriodStart` datetime,
    `ContextPeriodEnd` datetime,
    `ContextFacilityType` JSON, -- single CodeableConcept DataType
    `ContextPracticeSetting` JSON, -- single CodeableConcept DataType
    PRIMARY KEY (`id`),
    `SubjectId` int(5),
    INDEX subject_ind (SubjectId),
    FOREIGN KEY (SubjectId)
    REFERENCES patients(Id)
    ON DELETE CASCADE,
    -- ** FK below causes issue **
    `PractitionerId` int(5),
    INDEX practitioner_ind (PractitionerId),
    FOREIGN KEY (PractitionerId)
    REFERENCES practitioners(Id)
    ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `practitioners` 
(
    `Id` int(5) NOT NULL AUTO_INCREMENT,
    `Active` bool,
    `Name` JSON, -- JSON blob array of HumanName DataTypes
    `Telecom` JSON, -- JSON array of ContactPoint DataTypes
    `Address` JSON, -- JSON array of Address DataTypes
    `Gender` varchar(10),
    `BirthDate` datetime,
    `Qualification` JSON,
    `Communication` JSON, -- JSON array of CodeableConcept DataTypes
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

但是,我在运行时遇到以下错误:

错误1215:无法添加外键约束
SQL语句:
如果不存在,则创建表documentreferences
Idint(5)非空自动增量,
Statusvarchar(50),
DocStatusvarchar(50),
TypeJSON,--single codableconcept数据类型
ClassJSON,--创建的单个CodeableConcept数据类型
日期时间,
索引的日期时间,
描述varchar(50),
安全标签JSON,--CodeableConcept数据类型数组
上下文事件JSON,--CodeableConcept数据类型数组
上下文周期开始日期时间,
上下文周期结束日期时间,
ContextFacilityTypeJSON,--single CodeableConcept数据类型
ContextPracticesSettingJSON,--single CodeableConcept数据类型
主键(id),
SubjectIdint(5),
索引主题(SubjectId),
外键(SubjectId)
在删除级联中引用患者(id)

--**FK导致问题**
PracticeEridint(5),
索引从业者(PracticeErid),
外键(PracticeErid)
在删除级联时引用从业者(Id)
)引擎=InnoDB自动增量=10默认字符集=latin1

删除表上的FK时,架构将运行。我当前的模式有什么问题会导致错误?任何洞察都将不胜感激


共有1个答案

陆宏扬
2023-03-14

SQL喜欢让事情井然有序。在使用外键关系链接表之前,需要声明所有表。只需将Practices表的创建移到documentreferences表的上方,就可以了。

 类似资料:
  • 问题内容: 本质上,我和这个家伙有同样的问题,要减去表前缀。因为我没有表前缀,所以他的修复不起作用。http://forums.laravel.com/viewtopic.php?id=972 我正在尝试使用Laravel的Schema Builder来构建表,如下所示: 问题是,当我运行此代码(在/ setup路由中)时,出现以下错误: 基于网络上的帖子以及有关如何 设置 Laravel口才关系

  • 我想添加两个表,一个产品表和一个类别表。然后我要将产品表中的一个类别id链接到类别表中的主键。下面是我的代码: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table添加约束外键()引用())

  • 我试图在MySQL中创建一个有两个外键的表,这两个外键引用了其他两个表中的主键,但我得到一个errno:150错误,它将无法创建该表。 下面是所有3个表的SQL: 如有任何帮助,将不胜感激。

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

  • 问题内容: 因此,当我想添加外键时出现错误。我在带有EER图模型的MySQL Workbench中添加了外键。工作台尝试添加的行是: 我得到的错误是: 我搜索了解决方案,发现括号很重要或反引号,但是由于代码是由该工具创建的,因此对我来说似乎是正确的。是什么导致错误? 问题答案: 对于任何看此的人,都可以在EER图模型窗口中设置要用于生成SQL脚本的MySQL版本。转到“编辑”,“首选项”,然后是“

  • 问题内容: 我有两个表,是一列父表,并与一列(而不是实际的名称),当我把一个FK上,以在我得到的错误。如果要删除记录,我想删除表2记录。谢谢你的帮助 让我知道是否需要其他信息。我是mysql新手 问题答案: 我在HeidiSQL中遇到了同样的问题。您收到的错误非常神秘。我的问题最终是外键列和引用列的类型或长度不同。 外键列为,引用列为。一旦将它们设置为完全相同的类型,外键创建就可以完美地工作了。