现象 MySQL在删除一张表时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint...fails 原因 可能是在Mysql中,删除的表和另一张表设置了foreign key的关联,造成无法更新或删除数据; 解决方案 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。...禁用外键约束 SET FOREIGN_KEY_CHECKS = 0; 然后就可以删除表了 删除完成后再启动外键约束 SET FOREIGN_KEY_CHECKS = 1; 查看当前FOREIGN_KEY_CHECKS
(简称PK) 外键约束(foreign key):…(简称FK) 检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。...username varchar(255) ); 外键约束:foreign key 外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键 字段,那么该字段的值必须来源于参照的表的主键...外键可以为NULL 被外键引用的字段不一定是主键,但至少具有unique约束。...删除表的时候,先删除子表,在删除父表。...InnoDB 优点:支持事务、行级锁、外键等。这种存储引擎数据的安全得到保障。
在这里,1062 是 MYSQL_error_code,表示重复键错误;23000 是对应的 sqlstate_value。...在这里,23000 是 sqlstate_value,表示完整性约束错误(即重复键错误);1062 是对应的MySQL错误代码。...1008:数据库不存在,删除数据库失败。 1009:不能删除数据库文件导致删除数据库失败。 1010:不能删除数据目录导致删除数据库失败。 1012:不能读取系统表中的记录。...1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库。 1216:外键约束检查失败,更新子表记录失败。...1217:外键约束检查失败,删除或修改主表记录失败。
(3)创建 (CREATE) 表时就指定外键约束的话,先创建主表,再创建从表 (4)删表时,先删从表(或先删除外键约束),再删除主表 (5)当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据...(外键约束失败) (`atguigudb`....,或将从表中外键引用该主表的关系先删除 # 6.7 约束等级 Cascade方式 :在父表上 update/delete 记录时,同步 update/delete 掉子表的匹配记录 Set...外键与级联更新适用于 单机低并发 ,不适合 分布式 、 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;外键影响数据库的 插入速度 。 # 7....添加数据时,没有任何错误或警告 但是 MySQL 8.0 中可以使用 check 约束了。
( 3 )创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表 ( 4 )删表时,先删从表(或先删除外键约束),再删除主表 ( 5 )当主表的记录被从表参照时,主表的记录将不允许删除,...外键约束失败) (`atguigudb`....总结:约束关系是针对双方的 添加了外键约束后,主表的修改和删除数据受约束 添加了外键约束后,从表的添加和修改数据受约束 在从表上建立外键,要求主表必须存在 删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除...外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。 7....添加数据时,没有任何错误或警告 但是 MySQL 8.0中可以使用check约束了 。
1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复。...2003错误:mysql服务没有启动,请启动该服务 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败...,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败 1226...,出现写错误,请检查网络连接状况 1161:网络错误,写超时,请检查网络连接状况 1062:MYSQL字段值重复,入库失败 1169:MYSQL字段值重复,更新记录失败 1177:MYSQL打开数据表失败...1211:MYSQL当前用户没有创建用户的权限 1216:MYSQL外键约束检查失败,更新子表记录失败 1217:MYSQL外键约束检查失败,删除或修改主表记录失败 1226:MYSQL当前用户使用的资源已超过所允许的资源
1.4 特点 从表的外键列,必须引用/参考主表的主键或唯一约束的列 为什么?...如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据 在“从表”中指定外键约束,并且一个表可以建立多个外键约束 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致...但是索引名是外键的约束名 根据外键查询效率很高 删除外键约束后,必须手动删除对应的索引 1.5 添加外键约束 (1)建表时 create table 主表名称( 字段1...(外键约束失败) (`atguigudb`....总结: 约束关系是针对双方的 添加了外键约束后,主表的修改和删除数据受约束 添加了外键约束后,从表的添加和修改数据受约束 在从表上建立外键,要求主表必须存在删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除
什么是外检约束 外键其实很好理解,简单的说就是两张表建立一个连接关系。这里我们那主表A和副表B举例,我A表中有用户信息,B表中有用户订单信息。...要是数据完整对应起来,肯定是需要把两张表关联起来,我们因此会在B表中村一个A表的字段,常见的我们存的是A表的主键ID外键。 外检约束要求 .MySQL的数据表存储引擎必须为Innodb。...CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。 2....SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。...NO ACTION: InnoDB拒绝删除或者更新父表。 4. RESTRICT: 拒绝删除或者更新父表。
· 错误: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)。
是外键约束的关键字 说明4:references 后面跟上父表和父表中字段 4、需求:给student表中的teacher_id设置为teacher表的外键,并且对应id字段的数据 mysql...,因为有外键存在 5、外键数据的更新和删除行为 no action:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新(与restrict一致) restrict...:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新(与 no action一致) cascade:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,...如果有,则也删除/更新外键在子表中的记录 set null:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则设置子表中该外键的值为null,这就要求该外键记录允许null set...8、验证set null的更新和删除行为 需求1:同样先删除《student》和《teacher》表然后重新建立新的表,重新建立外键约束测试 mysql> select * from teacher
学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...如果没有使用`on delete/update cascade`,不能删除或更新父表数据,当删除父表的数据时候报错!...,删除父表主键数据会将子表联同删除,删除子表外键数据不影响父表。...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。...如果没有使用on delete/update cascade,不能删除或更新父表数据。
” 的问题,也就是不能添加外键约束,为什么就不能添加外键呢?...出现这个问题主要有三个原因: (1)外键对应的字段数据类型不一致 (2)设置外键时“删除时”设置为“SET NULL” (3)两张表的存储引擎不一致 经过检查,前两种情况排除,但是两张表的存储引擎都不清楚..."1217 - Cannot delete or update a parent row: a foreign key constraint fails",这可能是MySQL在引擎中设置了foreign...key关联,造成无法更新或删除数据。...,由于ndbcluster和集群,分布式有关,自己的电脑上没有足够的权限,所以修改不了,只要将两张表的引擎都修改为InnoDB,就可以添加外键了。
mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败...,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败...错误:1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF) 消息:对于 ’%s’: %s, 外键定义不正确。...错误:1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2) 消息:不能删除或更新父行,外键约束失败(%s)。...错误:1452 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW_2) 消息:不能添加或更新子行,外键约束失败(%s)。
换言之,它是用来独一无二地确认一个表格中的每一行数据。 主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为组合键 (Composite Key),也可以叫联合主键。...departments(dep_id)); ERROR 1215 (HY000): Cannot add foreign key # 设置dep_id非空,仍然不能成功创建外键 mysql> alter...,关联父表(department主键id),同步更新,同步删除 create table employee( id int primary key, name varchar(20) not null,...update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为...Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别
1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败<=================可以忽略 1008:数据库不存在,删除数据库失败<===============...==可以忽略 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目录导致删除数据库失败 1011:删除数据库文件失败 1012:不能读取系统表中的记录 1020:记录已被其他用户修改...1169:字段值重复,更新记录失败 1177:打开数据表失败 1180:提交事务失败 1181:回滚事务失败 1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库...1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败 1226:当前用户使用的资源已超过所允许的资源...,请重启数据库或重启服务器 1227:权限不足,您无权进行此操作 1235:MySQL版本过低,不具有本功能
的问题,也就是不能添加外键约束,为什么就不能添加外键呢?...出现这个问题主要有三个原因: (1)外键对应的字段数据类型不一致 (2)设置外键时“删除时”设置为“SET NULL” (3)两张表的存储引擎不一致 经过检查,前两种情况排除,但是两张表的存储引擎都不清楚...“1217 – Cannot delete or update a parent row: a foreign key constraint fails“,这可能是MySQL在引擎中设置了foreign...key关联,造成无法更新或删除数据。...,由于ndbcluster和集群,分布式有关,自己的电脑上没有足够的权限,所以修改不了,只要将两张表的引擎都修改为InnoDB,就可以添加外键了。
官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.外键作用: MySQL通过外键约束来保证表与表之间的数据的完整性和准确性...2.外键的使用条件 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引...) NO ACTION(无动作,默认的) CASCADE:表示父表在进行更新和删除时,更新和删除子表相对应的记录 RESTRICT和NO ACTION:限制在子表有关联记录的情况下,父表不能单独进行删除和更新操作...SET NULL:表示父表进行更新和删除的时候,子表的对应字段被设为NULL 4.案例演示 以CASCADE(级联)约束方式 1....因此父表中不可删除相对应记录,即兵种表还有属于西欧的兵种,因此不可单独删除父表中的西欧势力 update country set id=8 where id=1; #错误,子表中有相关记录,因此父表中无法修改
cascade, /*定义Cno为外键参考course表的主键Cno,并且实现级联删除SC表中相应的元组 */ ); 2....其实这里理论上来说应该是插入失败的,因为 student 有检查约束,但不同于SQL,在MYSQL中,CHECK只是一段可调用但无意义的子句。MySQL会直接忽略。...外键约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名) ON DELETE CASCADE...删除约束 删除主键约束:alter table 表名 drop primary key; 删除外键约束:alter table 表名 drop foreign key 外键(区分大小写);...这里我创建外键的时候 sno 中有些表有主键约束,有些却没有,所以当我删除主键约束的时候它会提示外键被错误建立起来了。但我不明白为什么建立外键的时候没有报错。
添加时进行约束: mysql> insert into test99 values(1,'孙悟空'),(null,'唐三藏'); ERROR 1048 (23000): Column 'id' cannot...sec) 4.1添加数据约束 这里在第二次添加数据时,会进行约束 mysql> insert into student values(1,'孙悟空'),(1,'猪八戒'); ERROR 1062 (23000...varchar类型的数据上; ️6.FOREIGN KEY的使用 这里的约束即为外键,可以用来建立两个表之间的联系; SQL执行语句: create table 表名(列名 类型,列名 类型,foreign...key(被约束的列)references 父类表(参考列)); 看读懂没关系,且听小编给你分析: 代码如下: mysql> create table class(classid int primary...,插入和修改会被父类约束,但是其他的列,可以随意修改和插入; 3.在删除时,由于父类时子类表的参考,所以无法先删除父表,得先删除子类的表后,然后再次删除父类这个表。 ️
它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。...语法都支持,但外键没有效果 不可以 表级约束: 所有列的下面 默认和非空不支持,其他支持 可以(主键没有效果) 根据约束起的作用,约束可分为: NOT NULL 非空约束...规定某个字段不能为空 UNIQUE 唯一约束 规定某个字段在整个表中是唯一的 PRIMARY KEY 主键 PRIMARY KEY 主键 FOREIGN KEY 外键约束 CHECK 检查约束 DEFAULT...PRIMARY KEY 约束 4.1 作用:用来唯一标识表中的一行记录。...MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。
领取专属 10元无门槛券
手把手带您无忧上云