本文为作者翻译文章,原文链接: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; 创建外键失败的更多提示信息
定义关系会自动将外键约束投影到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事务完成之前对引用行进行更新或删除。
通过外键,我们可以在不同的表之间建立关系,并且确保数据的完整性不会因为错误的操作而受损。 外键与复制的冲突 在有外键约束的情况下进行MySQL复制可能会遭遇一些问题。...如果在主服务器上更新或删除了某些行,而这些行的外键在从服务器上还没有得到更新,那么可能会出现复制错误。...外键约束检查失败:在从服务器上应用变更时,如果相关的外键数据尚未到位,可能会导致外键约束检查失败,从而使复制进程暂停。...应对策略 面对外键和复制的挑战,我们可以采取以下一些策略来改善或解决问题: 避免使用外键:在设计数据库结构时,尽量减少或避免使用外键约束,以简化复制过程。...使用GTID复制:GTID复制提供了更好的事务一致性保证,可以帮助解决由于外键约束导致的复制问题。 监控和警告:建立有效的监控和警告系统,以便在出现复制错误时及时得知,并采取相应的修复措施。
约束类型: 默认约束:插入时如果没有指定值,则插入默认值 主键约束:保证数据的唯一性 外键约束:预防破坏表之间连接的行为 非空约束 :字段值不能为空 唯一性约束:字段值不能重复 自增约束:字段在插入时自动.../image-20210602212346409.png)] 外键约束 从表中定义定义的外键指定外键字段、对应主表中的字段,MySQL会根据外键约束的定义,监控主表中数据的删除操作,如果发现要删除的主表记录...,正在被从表中某条记录的外键字段所引用,MySQL会提示错误,从而保证关联数据不会丢失。...正确使用事务,保证关联操作同时成功或同时失败回滚。...子查询按返回结果集进行分类: 表子查询:返回的结果是一个行的集合,N行N列,(N>=1)。表子查询经常用于父查询的FROM子句中。 行子查询:返回的结果是一个列的集合,一行N列,(N>=1)。
(如果函数失败,则查询再次变为本地。)读取可以正常继续,一旦函数提交,将变为分布式查询。 分布表 A 和 B 时,其中 A 对 B 有外键,首先需对目标表 B 设置分布键。...如果无法以正确的顺序分布,则删除外键,分布表,然后重新创建外键。 表分布后,使用 truncate_local_data_after_distributing_table 函数删除本地数据。...将它们添加到非分布列将产生错误(请参阅无法创建唯一性约束)。...这个例子展示了如何在分布式表上创建主键和外键: -- -- Adding a primary key -- -------------------- -- We'll distribute these.... */ 稍后,在非高峰时段,数据库管理员可以尝试修复错误行并重新验证约束。
确定表的类型 为迁移准备源表 添加分布键 回填新创建的列 准备申请 Citus 设置 Development Citus 集群 在键中包含分布列 向查询添加分布键 Ruby on Rails Django.../修改列 添加/删除约束 使用 NOT VALID 约束 添加/删除索引 类型和函数 手动修改 摄取、修改数据 (DML) 插入数据 “From Select” 子句(分布式汇总) COPY 命令(批量加载...无法接收查询结果 解决方法 取消事务,因为它涉及分布式死锁 解决方法 无法连接到服务器:无法分配请求的地址 解决方法 SSL 错误:证书验证失败 解决方法 无法连接到任何活动的放置 解决方法 剩余的连接槽保留给非复制超级用户连接...解决方法 PgBouncer 无法连接到服务器 解决方法 关系 foo 没有被分发 解决方法 不支持的子句类型 解决方法 在事务中执行第一个修改命令后,无法打开新连接 解决方法 无法创建唯一性约束 解决方法...对数据进行哈希分区时如何选择分片数? 如何更改哈希分区表的分片数? citus 如何支持 count(distinct) 查询? 分布式表在哪些情况下支持唯一性约束?
如果插入请求失败由于违反唯一键(字段(s)的一些独特的关键,存在这一行已经有相同的值(s)为插入指定的行),然后它会自动变成一个更新请求这一行,并插入或更新使用指定的字段值来更新现有的行。...SQLCODE错误 默认情况下,多行UPDATE是一个原子操作。 如果不能更新一行或多行,则UPDATE操作失败,不会更新任何行。...尝试更新属于分片键一部分的字段会产生SQLCODE -154错误。 如果更新将违反字段的唯一性约束,则不能更新字段值。...试图更新一个字段(或一组字段)的值,使更新违反惟一性约束或主键约束,将导致SQLCODE -120错误。 如果字段具有UNIQUE数据约束,或者如果惟一字段约束已应用于一组字段,则返回此错误。...如果更新其中一个指定的行会违反外键引用完整性(并且没有指定%NOCHECK), UPDATE将无法更新任何行,并发出SQLCODE -124错误。
外键约束的参照操作及功能: 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
在父/子关系中,没有定义的子项顺序。应用程序代码不得依赖于任何特定顺序。 可以定义引用以只读方式装载的数据库中的类的外键约束。...SQL支持以下外键引用操作: NO ACTION SET DEFAULT SET NULL CASCADE NO ACTION-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行...如果是,则删除或更新失败。(如果外键引用自身,则此约束不适用。)。默认情况下不执行任何操作。无操作是切片表支持的唯一引用操作。...SET NULL-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为NULL。外键字段必须允许空值。...SET DEFAULT-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为该字段的默认值。
例如,如果定义了RESTRICT类型的约束,并且有一个子行具有多个父行,InnoDB不允许删除任何父行。...在插入、删除或更新多行的 SQL 语句中,外键约束(如唯一约束)会逐行检查。在执行外键检查时,InnoDB会在必须检查的子记录或父记录上设置共享的行级锁。...这意味着不可能使用外键删除引用自身的行。 没有存储引擎,包括InnoDB,识别或执行引用完整性约束定义中使用的MATCH子句。...因此,在 MySQL 中,约束处理与其他数据库管理系统有些不同。当在非事务表中插入或更新了大量行且发生错误时,无法回滚更改时,我们必须处理这种情况。...或 UPDATE)可能违反主键、唯一键或外键约束而导致错误。
· 错误:1215 SQLSTATE: HY000 (ER_CANNOT_ADD_FOREIGN) 消息:无法添加外键约束。...· 错误:1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW) 消息:无法添加或更新子行,外键约束失败。...· 错误:1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED) 消息:无法删除或更新父行,外键约束失败。...· 错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...· 错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复。...1062:字段值重复,入库失败 1169:字段值重复,更新记录失败 1177:打开数据表失败 1180:提交事务失败 1181:回滚事务失败 1203:当前用户和数据库建立的连接已到达数据库的最大连接数...,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败 1226...MYSQL当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库 1205:MYSQL加锁超时 1211:MYSQL当前用户没有创建用户的权限 1216:MYSQL外键约束检查失败...,更新子表记录失败 1217:MYSQL外键约束检查失败,删除或修改主表记录失败 1226:MYSQL当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器 1227:MYSQL权限不足,您无权进行此操作
试图将子查询指定为字段值将导致SQLCODE -144错误。 插入操作 Privileges 要将一行或多行数据插入到表中,您必须拥有该表的表级特权或列级特权。...尝试为具有列级ReadOnly (SELECT或REFERENCES)权限的字段插入值将导致SQLCODE -138错误:无法为只读字段插入/更新值。...此设置不适用于用NOCHECK关键字定义的外键。 在INSERT操作期间,对于每个外键引用,都会在引用表中相应的行上获得一个共享锁。 在执行引用完整性检查和插入该行时,此行被锁定。...这确保了引用的行不会在引用完整性检查和插入操作完成之间发生更改。 但是,如果指定了%NOLOCK关键字,则不会对指定的表或引用表中相应的外键行执行锁操作。...行级安全性 IRIS行级安全性允许INSERT添加行,即使定义了行安全性,也不允许随后访问该行。
定期备份数据:备份可以保护数据免受意外的损失或破坏。 更新数据库软件:及时更新MySQL软件,应用程序和操作系统的补丁,以修复安全漏洞。 使用防火墙:防火墙可以限制对数据库的访问和流量控制。...23、如何在MySQL中实现外键约束? MySQL实现外键约束可以使用FOREIGN KEY约束。...MySQL中实现外键约束的方法: 在创建表时,使用FOREIGN KEY约束指定外键,指向另一个表的主键。 外键约束可以在CREATE TABLE或ALTER TABLE语句中指定。...当使用外键约束时,必须使用InnoDB存储引擎。 外键约束可以保证数据的完整性,避免数据丢失或不一致。 如果试图删除具有关联记录的主键,则会拒绝删除操作。...如果试图插入与另一个表中不存在的外键,则会拒绝插入操作。 可以使用CASCADE选项来自动删除或更新具有关联记录的外键记录。 24、什么是MySQL存储引擎?MySQL支持哪些存储引擎?
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。 13.了解XSS攻击吗?如何防止?...特点: · 行锁设计、支持外键,支持事务,支持并发,锁粒度是支持mvcc得行级锁; MyISAM存储引擎: 是MySQL官方提供的存储引擎,主要面向OLAP(Online Analytical Processing...外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。...主键、外键和索引的区别?...主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值
默认情况下,如果不能删除一行或多行,则TRUNCATE TABLE操作失败,不会删除任何行。 如果表被其他进程以EXCLUSIVE模式或SHARE模式锁定,则TRUNCATE TABLE失败。...如果删除一行会违反外键引用完整性,那么TRUNCATE TABLE将失败。 未删除任何行,因此TRUNCATE TABLE发出SQLCODE -124错误。 这个默认行为是可以修改的,如下所述。...Fast Truncate 限制 快速截断可以应用于标准表或分片表。 不能应用快速截断: 如果用户无法获得表级锁(除非指定了%NOLOCK)。 如果表是外键约束的目标。...指定约束参数限制处理如下: %NOCHECK - 禁止对引用被删除行的外键进行引用完整性检查。 %NOLOCK - 抑制被删除行的行锁定。 这应该只在单个用户/进程更新数据库时使用。...如果在删除父记录时指定了约束参数,则在删除相应的子记录时将应用相同的约束参数。
1、假设无暇代码:要避免在没有外键约束的情况下产生引用的不完整状态,需要再任何改变生效前执行额外的Select查询, 以此来确保这些改变不会导致引用错误。...2、检查错误:开发人员使用外部脚本来检查错误的数据。 3、修改代码时,无法保证系统中的所有部分都被同时修改。...5、当你Update更新一条被其他记录依赖的记录时,在没有更新父记录前,你不能更新子记录, 而且也不能在更新父记录前更新子记录。...合理使用反模式: 如果数据库产品不支持外键约束功能,则不得不使用别的方法来保持引用完整性,比如使用监控脚本。 同样也存在一些极度灵活的数据库设计,外键无法用来表示其对应的关系。...2、外键约束的确需要多那么一点额外的系统开销,但相比于其他的一些选择,外键确实更高效一点: (1)不需要在更新或删除记录前执行Select检查; (2)在同步修改时不需要再锁住整张表
,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败...错误:1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF) 消息:对于 ’%s’: %s, 外键定义不正确。...错误:1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW) 消息:子查询返回1行以上。...错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
SQL命令 INSERT(一) 向表中添加新行(或多行)。...如果INSERT请求由于唯一键冲突而失败(对于某个唯一键的字段,存在与为INSERT指定的行具有相同值的行),则它会自动转换为该行的UPDATE请求,并且INSERT或UPDATE使用指定的字段值更新现有行...表参数 可以指定要直接插入到表中的表参数、通过视图插入的表参数或通过子查询插入的表参数。如创建视图中所述,通过视图插入受要求和限制的约束。...尝试使用不可更新的视图或子查询进行插入会生成SQLCODE-35错误。 不能在表参数中指定表值函数或联接语法。...如果定义了其中一个字段,则如果没有为这些字段指定值,此INSERT语法将发出SQLCODE-62错误;如果确实为这些字段指定值,此INSERT语法将发出SQLCODE-138无法插入/更新只读字段的值错误
添加外键: -- 创建表时添加外键 CREATE TABLE 表名( 字段名 数据类型, ......外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名); 删除外键: ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; 外键约束 外键同样也具有约束条件...: 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与 NO ACTION 一致) 默认行为 CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则 也删除/更新外键在子表中的记录。...BEGIN --效果和@@autocommit = 0一样 提交事务 -- 当数据无法自动提交或开启事务后,我们需要手动提交,只有手动提交后,信息才会上传 COMMIT 回滚事务 -- 当事务中途出现错误
领取专属 10元无门槛券
手把手带您无忧上云