首页
学习
活动
专区
圈层
工具
发布

如何处理 MySQL错误码 1215:无法添加外键约束?

本文为作者翻译文章,原文链接:Dealing with MySQL Error Code 1215: “Cannot add foreign key constraint” 在给一个表创建外键时,MySQL...总是会出现提示: ERROR 1215 (HY000): Cannot add foreign key constraint 这信息基本是啥都没说,下面就来说说几种常见的导致1215错误的情况: 父表不存在...REFERENCES pariente(id); 正确: ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id); 父列和子列数据类型不一致...(10), FOREIGN KEY (parent_column_3) REFERENCES `parent`(`column_3`) ) ENGINE INNODB; 父表和子表表(列)的字符集 或...parent_virt INT(10) NOT NULL, FOREIGN KEY (parent_virt) REFERENCES parent(column_virt) ) ENGINE INNODB; 创建外键失败的更多提示信息

22.9K21

PostgreSQL 13.0-13.15 功能更新和bug fixed列表

版本号 BUG FIXED/功能更新 PG13.0 wal_keep_segments 改名为 wal_keep_size PG13.0 移除了7.0 8.0 之前的语法定语的运算符支持和外键约束的支持...修复涉及作为外键表的继承子表的常规表的查询的规划错误 PG13.4 在WAL重放事务中引起文件截断时更新最低恢复点文件截断是不可逆转的,因此不再安全地在该记录之前停止恢复。...PG13.7 修复使用其前导键为表达式的索引进行CLUSTER时表行的错误排序,表将使用正确的数据重建,但排序顺序与索引顺序关系不大。...( PG13.9 在执行ALTER TABLE ATTACH PARTITION时修复构建每个分区外键约束的bu PG13.9 修复在创建分区索引时匹配索引表达式和谓词的错误 PG13.9 修复为每个分区外键约束生成约束名称的...PG13.14 修复在 PlaceHolderVars 中错误包装子查询输出表达式的问题,此修复解决了在子查询位于外连接下方且其输出列横向引用了外连接范围外的内容时产生错误结果的问题。

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL表之间的关系

    定义关系会自动将外键约束投影到SQL。可以在类定义中添加显式外键定义(对于关系未涵盖的情况)。可以使用CREATE TABLE或ALTER TABLE命令添加外键。...可以使用ALTER TABLE命令删除外键。用作外键引用的RowID字段必须是公共的。引用隐藏的RowID?有关如何使用公用(或专用)RowID字段定义表的信息。一个表(类)的外键最大数目为400。...外键引用完整性检查外键约束可以指定更新或删除时的引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...参照完整性检查失败会生成如下错误:错误#5540:SQLCODE:-124消息:表'HealthLanguage.FKey2'中至少存在1行,该行引用键NewIndex1-外键约束'NewForeignKey1...默认情况下,当删除带有外键的行时,InterSystems IRIS将在相应的被引用表的行上获取长期(直到事务结束)共享锁。这样可以防止在引用行上的DELETE事务完成之前对引用行进行更新或删除。

    3.9K10

    MySQL:外键与复制系统的相遇的挑战与应对

    通过外键,我们可以在不同的表之间建立关系,并且确保数据的完整性不会因为错误的操作而受损。 外键与复制的冲突 在有外键约束的情况下进行MySQL复制可能会遭遇一些问题。...如果在主服务器上更新或删除了某些行,而这些行的外键在从服务器上还没有得到更新,那么可能会出现复制错误。...外键约束检查失败:在从服务器上应用变更时,如果相关的外键数据尚未到位,可能会导致外键约束检查失败,从而使复制进程暂停。...应对策略 面对外键和复制的挑战,我们可以采取以下一些策略来改善或解决问题: 避免使用外键:在设计数据库结构时,尽量减少或避免使用外键约束,以简化复制过程。...使用GTID复制:GTID复制提供了更好的事务一致性保证,可以帮助解决由于外键约束导致的复制问题。 监控和警告:建立有效的监控和警告系统,以便在出现复制错误时及时得知,并采取相应的修复措施。

    53020

    史上最全之MyISAM与InnoDB区别

    而MyISAM在写入时会对整个表进行锁定,这意味着其他用户将无法同时进行写入操作,只能等待锁释放。 外键支持:InnoDB支持外键约束,可以在表之间建立关系,确保数据的完整性和一致性。...而MyISAM不支持外键,无法建立表之间的关系。 行级锁定:InnoDB支持行级锁定,可以在需要的时候锁定单独一行,而不是整个表。这样可以提高并发性能,减少锁冲突的可能性。...而在写操作较多的情况下,InnoDB的性能更好,因为它支持行级锁,可以更好地处理并发写入。 4. 外键支持: InnoDB支持外键约束,可以在表之间建立关系,保证数据的一致性和完整性。...而MyISAM不支持外键约束。InnoDB可以通过在表之间建立关系来保证数据的一致性和完整性。外键约束可以定义在一个表的列上,用来引用另一个表的主键。...这样,当在一个表上进行插入、更新或删除操作时,会自动对相关的外键进行检查和限制,确保数据的完整性。而MyISAM引擎不支持外键约束,这可能会导致数据不一致或错误的情况发生。

    77710

    【YashanDB开发者工具(YDC)】Release Notes

    导入时,可选择导入到现有表或导入至新表,同时可对数据格式配置相关参数,并添加注释说明。导出:支持将结果集或表数据导出到CSV或Excel文件中,导出方式包括单个导出和批量导出。...外键管理:支持外键的新增、删除、查看操作。支持查看数据库表中的外键详情,包括外键名称、所有者、参照表、约束类型、参照对象、删除时动作、更新时动作、状态等信息。约束管理:支持约束的新增、删除、查看操作。...快捷键设置:支持用户自定义设置快捷键,包括格式化SQL、行注释、块注释、转换为大写、转换为小写、清理空白、立即执行SQL、运行、格式化、事务提交、事务回滚,以及调试配置(继续、步入、步过、步出、结束调试...修复SQL语句中带有聚合函数时查询失败的问题。修复操作系统没有VCRUNTIME.DLL导致YDC连接数据库失败的问题。修复表名或者表字段中带有特殊字符修改数据错误问题。...修复SQL语句中带有聚合函数时查询失败的问题。修复结果集修改未提交的数据失败问题。

    55010

    MySQL学习笔记(长期更新)

    约束类型: 默认约束:插入时如果没有指定值,则插入默认值 主键约束:保证数据的唯一性 外键约束:预防破坏表之间连接的行为 非空约束 :字段值不能为空 唯一性约束:字段值不能重复 自增约束:字段在插入时自动.../image-20210602212346409.png)] 外键约束 从表中定义定义的外键指定外键字段、对应主表中的字段,MySQL会根据外键约束的定义,监控主表中数据的删除操作,如果发现要删除的主表记录...,正在被从表中某条记录的外键字段所引用,MySQL会提示错误,从而保证关联数据不会丢失。...正确使用事务,保证关联操作同时成功或同时失败回滚。...子查询按返回结果集进行分类: 表子查询:返回的结果是一个行的集合,N行N列,(N>=1)。表子查询经常用于父查询的FROM子句中。 行子查询:返回的结果是一个列的集合,一行N列,(N>=1)。

    1.5K10

    Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)

    (如果函数失败,则查询再次变为本地。)读取可以正常继续,一旦函数提交,将变为分布式查询。 分布表 A 和 B 时,其中 A 对 B 有外键,首先需对目标表 B 设置分布键。...如果无法以正确的顺序分布,则删除外键,分布表,然后重新创建外键。 表分布后,使用 truncate_local_data_after_distributing_table 函数删除本地数据。...将它们添加到非分布列将产生错误(请参阅无法创建唯一性约束)。...这个例子展示了如何在分布式表上创建主键和外键: -- -- Adding a primary key -- -------------------- -- We'll distribute these.... */ 稍后,在非高峰时段,数据库管理员可以尝试修复错误行并重新验证约束。

    3.8K20

    Citus 11 官方手册脑图 - PostgreSQL 超大规模分布式数据库解决方案上手指南

    确定表的类型 为迁移准备源表 添加分布键 回填新创建的列 准备申请 Citus 设置 Development Citus 集群 在键中包含分布列 向查询添加分布键 Ruby on Rails Django.../修改列 添加/删除约束 使用 NOT VALID 约束 添加/删除索引 类型和函数 手动修改 摄取、修改数据 (DML) 插入数据 “From Select” 子句(分布式汇总) COPY 命令(批量加载...无法接收查询结果 解决方法 取消事务,因为它涉及分布式死锁 解决方法 无法连接到服务器:无法分配请求的地址 解决方法 SSL 错误:证书验证失败 解决方法 无法连接到任何活动的放置 解决方法 剩余的连接槽保留给非复制超级用户连接...解决方法 PgBouncer 无法连接到服务器 解决方法 关系 foo 没有被分发 解决方法 不支持的子句类型 解决方法 在事务中执行第一个修改命令后,无法打开新连接 解决方法 无法创建唯一性约束 解决方法...对数据进行哈希分区时如何选择分片数? 如何更改哈希分区表的分片数? citus 如何支持 count(distinct) 查询? 分布式表在哪些情况下支持唯一性约束?

    5.8K30

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...前三种范式是: 第一范式 (1NF): 每一行和每一列都存储单个值,并且没有重复的行。第二范式 (2NF): 没有依赖于主键或唯一键一部分的列。...查找和修复这些错误非常耗时。从一开始就创建约束可以避免这种痛苦。 主要的约束包括: 主键: 确保值是强制性和唯一的。一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。...与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。外键指向子表中的列到父表中的主键或唯一约束。有了这个,您就不能拥有孤立的行。...如果是这样,添加约束将失败,您将需要花费大量时间来修复它。幸运的是,您可以使用一个技巧来阻止更多无效数据进入: 创建未验证的约束。 这些忽略现有数据,并且仅将规则应用于新数据。

    1.3K00

    SQL命令 UPDATE(一)

    如果插入请求失败由于违反唯一键(字段(s)的一些独特的关键,存在这一行已经有相同的值(s)为插入指定的行),然后它会自动变成一个更新请求这一行,并插入或更新使用指定的字段值来更新现有的行。...SQLCODE错误 默认情况下,多行UPDATE是一个原子操作。 如果不能更新一行或多行,则UPDATE操作失败,不会更新任何行。...尝试更新属于分片键一部分的字段会产生SQLCODE -154错误。 如果更新将违反字段的唯一性约束,则不能更新字段值。...试图更新一个字段(或一组字段)的值,使更新违反惟一性约束或主键约束,将导致SQLCODE -120错误。 如果字段具有UNIQUE数据约束,或者如果惟一字段约束已应用于一组字段,则返回此错误。...如果更新其中一个指定的行会违反外键引用完整性(并且没有指定%NOCHECK), UPDATE将无法更新任何行,并发出SQLCODE -124错误。

    4.1K20

    MySQL数据库操作教程

    外键约束的参照操作及功能: 1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行 2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL (ps.如果使用该选项,...在CONSTRAINT后,有个名称即为外键约束名 ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名; SHOW CREATE TABLE 表名; --发现外键约束已经删除,但是还会存在索引...外键约束的参照操作及功能: 1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行 2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL (ps.如果使用该选项,...3.子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。 4.子查询返回值,可以为标量、一行、一列或子查询。...[NOT] EXISTS的子查询(不常用) 如果子查询返回任何行,EXISTS将返回TRUE; 否则为FALSE 1.多表更新 --基本格式 UPDATE table_references SET

    5.7K10

    不再隐藏变更:MySQL 9.6 如何变革外键管理

    其工作原理如下:外键级联:当对父表执行 DELETE 或 UPDATE 等语句时,InnoDB 会检查外键约束。...重要的是,这些子行更改对 SQL 层是不可见的。因此,在基于行的复制 (RBR) 模式下,InnoDB 内部执行的级联操作不会出现在 MySQL 二进制日志中。...系统日志不完整:二进制日志中经常缺少子行更改,导致复制和审计不完整。数据捕获差距:依赖二进制日志或完整变更历史记录的数据工具和下游系统无法始终跟踪与外键相关的每个更新或删除。...自增间隙:如果外键约束失败,任何尝试插入操作都会增加自增计数器,这可能会导致值出现间隙,符合 MySQL 的标准行为。...针对级联行更新统计信息:行级统计信息(例如 delete_rows )已更新,以包含受级联外键操作影响的行。这确保系统统计信息能够准确反映外键强制执行所执行的所有数据更改。

    19710

    MySQL8 中文参考(二)

    例如,如果定义了RESTRICT类型的约束,并且有一个子行具有多个父行,InnoDB不允许删除任何父行。...在插入、删除或更新多行的 SQL 语句中,外键约束(如唯一约束)会逐行检查。在执行外键检查时,InnoDB会在必须检查的子记录或父记录上设置共享的行级锁。...这意味着不可能使用外键删除引用自身的行。 没有存储引擎,包括InnoDB,识别或执行引用完整性约束定义中使用的MATCH子句。...因此,在 MySQL 中,约束处理与其他数据库管理系统有些不同。当在非事务表中插入或更新了大量行且发生错误时,无法回滚更改时,我们必须处理这种情况。...或 UPDATE)可能违反主键、唯一键或外键约束而导致错误。

    1K10

    SQL命令 CREATE TABLE(五)

    在父/子关系中,没有定义的子项顺序。应用程序代码不得依赖于任何特定顺序。 可以定义引用以只读方式装载的数据库中的类的外键约束。...SQL支持以下外键引用操作: NO ACTION SET DEFAULT SET NULL CASCADE NO ACTION-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行...如果是,则删除或更新失败。(如果外键引用自身,则此约束不适用。)。默认情况下不执行任何操作。无操作是切片表支持的唯一引用操作。...SET NULL-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为NULL。外键字段必须允许空值。...SET DEFAULT-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为该字段的默认值。

    2.6K50

    MySQL 9.6如何变革外键的管理?

    其工作原理如下: 外键级联:当对父表执行 DELETE 或 UPDATE 等语句时,InnoDB 会检查外键约束。...重要的是,这些子行更改对 SQL 层是不可见的。因此,在基于行的复制 (RBR) 模式下,InnoDB 内部执行的级联操作不会出现在 MySQL 二进制日志中。...系统日志不完整:二进制日志中经常缺少子行更改,导致复制和审计不完整。 数据捕获差距:依赖二进制日志或完整变更历史记录的数据工具和下游系统无法始终跟踪与外键相关的每个更新或删除。...自增间隙:如果外键约束失败,任何尝试插入操作都会增加自增计数器,这可能会导致值出现间隙,符合 MySQL 的标准行为。...针对级联行更新统计信息:行级统计信息(例如 delete_rows )已更新,以包含受级联外键操作影响的行。这确保系统统计信息能够准确反映外键强制执行所执行的所有数据更改。

    22510

    PostgreSQL 哪些版本尽量避免使用,版本更新重点明晰(PG12)

    /bug fixed 链接/注释 12.1 修复了 reindex concurrently 的 bug 在获取锁和释放锁上的问题 12.1 修复了 vacuum 在工作中错误的冻结正在运行的事务的问题...fixed 链接/注释 12.2 bug fixed 分区表中如果使用级联中的表被截断引起的问题 https://www.postgresql.org/docs/release/12.2/ 12.2 修复无法将外键约束附加到子分区的问题...12.2 逻辑复制中在表进行 DDL 变更后导致的订阅失败或崩溃的问题 Fix crash in logical replication subscriber after DDL changes on...columns in partitioned tables (Peter Eisentraut) 12.8 版本号 更新要点/bug fixed 链接/注释 12.8 修复多个 SQL 命令的错误问题...attempted page deletion in a btree index fails to find the page's parent downlink (Peter Geoghegan) 12.13 修复事务和子事务运行中可能产生的错误

    2.7K10

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...前三种范式是: 第一范式 (1NF): 每一行和每一列都存储单个值,并且没有重复的行。第二范式 (2NF): 没有依赖于主键或唯一键一部分的列。...查找和修复这些错误非常耗时。从一开始就创建约束可以避免这种痛苦。 主要的约束包括: 主键: 确保值是强制性和唯一的。一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。...与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。外键指向子表中的列到父表中的主键或唯一约束。有了这个,您就不能拥有孤立的行。...如果是这样,添加约束将失败,您将需要花费大量时间来修复它。幸运的是,您可以使用一个技巧来阻止更多无效数据进入: 创建未验证的约束。 这些忽略现有数据,并且仅将规则应用于新数据。

    1.1K10
    领券