外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。...如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。...CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。 2....SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。...外键约束使用最多的两种情况: 1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败; 2)父表更新时子表也更新,父表删除时子表匹配的项也删除。
什么是外检约束 外键其实很好理解,简单的说就是两张表建立一个连接关系。这里我们那主表A和副表B举例,我A表中有用户信息,B表中有用户订单信息。...外键约束的作用 保证数据的完整性和一致性. 创建语法 [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...)...CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。 2....SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。...当我们进行删除操作的时候,会提示无法删除或者更新主表。
(3)创建 (CREATE) 表时就指定外键约束的话,先创建主表,再创建从表 (4)删表时,先删从表(或先删除外键约束),再删除主表 (5)当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据...(外键约束失败) (`atguigudb`....did=1001; #删除主表失败 ERROR 1451 (23000): Cannot delete(删除) or update(修改) a parent row(父表记录): a foreign...,要求主表必须存在 删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除 # 6.7 约束等级 Cascade方式 :在父表上 update/delete 记录时,同步 update...外键与级联更新适用于 单机低并发 ,不适合 分布式 、 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;外键影响数据库的 插入速度 。 # 7.
错误: 在MySQL中删除一张表或一条数据的时候,可能提示以下错误: [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint...原因: 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。 解决方法: 可以通过设置FOREIGN_KEY_CHECKS避免这种情况。...删除数据后可以在开启外键约束:SET FOREIGN_KEY_CHECKS=1;比如: SELECT @@FOREIGN_KEY_CHECKS; //查询外键约束 SET FOREIGN_KEY_CHECKS...=0; //关闭外键约束检查 DELETE FROM TABLE_NAME_; SET FOREIGN_KEY_CHECKS=1; //开启外键约束检查 关闭外键约束检查使用场景: 删除或更新数据库数据时...新数据库在初始化建表时,关闭外键约束检查,可以不用关心建表语句执行的先后顺序。 数据库执行完毕后,要记得开启外键约束检查。
KEY外键约束约束表之间的关系 一、主键约束(primary key constraint) 主键创建时默认会自动生成约束,也可通过显示声明。 ...alter table 表名 add constraint 约束名 primary key (列名) 一个表有且只有一个主键约束 主键约束意味着唯一且非空 创建主键会自动创建对应的索引,删除主键也会删除对应的索引...二、外键约束(foreign key constraint) 外键创建时默认会自生成约束,也可通过显示声明。 ...一个表可以有很多的外键约束 外键约束需要一个表的两个字段或者两个表的两个字段之间建立外键约束 外键约束一定是在从表、子表中建立的。...ID值有自动递增的特性,当语句执行失败或事务回滚时,ID值不会回滚,这会导致ID列的值不连续。
学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...如果没有使用`on delete/update cascade`,不能删除或更新父表数据,当删除父表的数据时候报错!...cascade 不能更新父表主键或子表外键,删除父表主键数据会将子表联同删除,删除子表外键数据不影响父表。...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。...如果没有使用on delete/update cascade,不能删除或更新父表数据。
01 MySQL 外键约束关键字 如果你经常使用MySQL的外键约束,可能对外键约束的关键字并不陌生。...常见的外键约束关键字有:cascade、restrict、no action和set default和set null,其中, cascade:表示级联,父表的动作会级联到主表中; restrict:表示严格模式...,它是MySQL特有的关键字,表示父表的上不能直接删除或者更新有外键关联的记录; no action:表示严格模式,标准SQL关键字,在MySQL中,它和restrict的意思相同; set default...:父表上的记录删除后,关联的子表记录会设置成默认值; set null:父表上的记录删除后,关联的子表记录会设置成null值。...mysql> delete from parent where id=1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 父表 (父表字段)on update 更新行为 on delete...,不能删除或者修改父表中的数据,因为有外键存在 5、外键数据的更新和删除行为 no action:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新(与restrict...一致) restrict:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新(与 no action一致) cascade:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键...,如果有,则也删除/更新外键在子表中的记录 set null:当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则设置子表中该外键的值为null,这就要求该外键记录允许null set...8、验证set null的更新和删除行为 需求1:同样先删除《student》和《teacher》表然后重新建立新的表,重新建立外键约束测试 mysql> select * from teacher
FOREIGN KEY: 在表级指定子表中的列 REFERENCES: 标示在父表中的列 ON DELETE CASCADE: 当父表中的列被删除时,子表中相对应的列也被删除 ON DELETE...SET NULL: 子表中相应的列置空 如果子表在建外键时,该列的数据并不在父表,则无法创建该约束。...外键约束对delete语句的影响: 删除主表数据时,如果从表有对该数据的引用,要先将从表中的数据处理好。主表才有可能违反约束。...ON DELETE SET NULL 和 ON DELETE CASCADE对外键约束的影响 ON DELETE SET NULL 子句的作用是,当主表中的一行数据被删除时,ORACLE自动将从表中依赖于...CASCADE 子句的作用是,当主表中的一行数据被删除时,ORACLE自动将从表中依赖于它的记录外键也删除。
从以下四个方面考虑: 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围...创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表 删表时,先删从表(或先删除外键约束),再删除主表 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据...添加了外键约束后,从表的添加和修改数据受约束 在从表上建立外键,要求主表必须存在 删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除 约束等级 Cascade方式 :在父表上update.../delete记录时,同步update/delete掉子表的匹配记录 Set null方式 :在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为not...外键与级联更新适用于 单 机低并发 ,不适合 分布式 、 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;外键影响 数据库的 插入速度 。
官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.外键作用: MySQL通过外键约束来保证表与表之间的数据的完整性和准确性...ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中的外键改动) CASCADE(跟随外键改动) SET NULL(设空值) SET DEFAULT(设默认值...) NO ACTION(无动作,默认的) CASCADE:表示父表在进行更新和删除时,更新和删除子表相对应的记录 RESTRICT和NO ACTION:限制在子表有关联记录的情况下,父表不能单独进行删除和更新操作...SET NULL:表示父表进行更新和删除的时候,子表的对应字段被设为NULL 4.案例演示 以CASCADE(级联)约束方式 1....因此父表中不可删除相对应记录,即兵种表还有属于西欧的兵种,因此不可单独删除父表中的西欧势力 update country set id=8 where id=1; #错误,子表中有相关记录,因此父表中无法修改
尝试为具有列级ReadOnly (SELECT或REFERENCES)权限的字段插入值将导致SQLCODE -138错误:无法为只读字段插入/更新值。...此设置不适用于用NOCHECK关键字定义的外键。 在INSERT操作期间,对于每个外键引用,都会在引用表中相应的行上获得一个共享锁。 在执行引用完整性检查和插入该行时,此行被锁定。...这确保了引用的行不会在引用完整性检查和插入操作完成之间发生更改。 但是,如果指定了%NOLOCK关键字,则不会对指定的表或引用表中相应的外键行执行锁操作。...分片表始终没有自动事务模式,这意味着对分片表的所有插入、更新和删除都是在事务范围之外执行的。...w "DELETE失败会导致数据库不一致",!
当试图从引用表中删除一行时,ON DELETE子句定义应该对引用表中的行采取什么操作。 ON UPDATE子句定义被引用表的更新规则。...SQL支持以下外键引用操作: NO ACTION SET DEFAULT SET NULL CASCADE NO ACTION-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行...如果是,则删除或更新失败。(如果外键引用自身,则此约束不适用。)。默认情况下不执行任何操作。无操作是切片表支持的唯一引用操作。...SET NULL-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为NULL。外键字段必须允许空值。...SET DEFAULT-删除行或更新被引用表中的键值时,将检查所有引用表,以查看是否有任何行引用要删除或更新的行。如果是,则该操作会导致引用要删除或更新的行的外键字段设置为该字段的默认值。
从以下四个方面考虑: 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录。...expr 将约束条件指定为布尔表达式,对于表的每一行,该表达式的计算结果必须为 TRUE 或 UNKNOWN(对于 NULL 值)。 如果条件计算结果为 FALSE,则失败并发生约束冲突。...这意味着在插入、更新或删除数据时,MySQL 将检查约束条件(expr)是否满足,如果条件不满足,则不允许进行相应的操作。 如果指定为 NOT ENFORCED,则创建约束但不强制执行。...这意味着约束冲突将被记录下来,但不会影响插入、更新或删除数据的操作。 CHECK 约束可指定为表约束或列约束: 表约束不会出现在列定义中,并且可以引用任何表列。...-- 添加新的唯一约束 ALTER TABLE table_name ADD UNIQUE (new_unique_column); 修改外键约束 若要修改外键约束,通常需要删除原来的外键约束,然后再添加新的外键约束
二、使用限制 下列情形使得DML error logging 特性失效 延迟约束特性 Direct-path INSERT 或MERGE 引起违反唯一约束或唯一索引...CODE") 2 rows selected. 2、UPDATE 操作 下面的代码将尝试去更新1-10行的code列,其中8行的code值设置为自身,而第9与第10行设置为NULL。...CODE") 3、MERGE 操作 下面的代码从dest表删除一些行,然后尝试从source 表合并数据到dest表 DELETE FROM dest WHERE id > 50000...--更新操作失败的行以及失败原因同样被记录在ERR$_DEST 表中 COLUMN ora_err_mesg$ FORMAT A70 SELECT ora_err_number$, ora_err_mesg...CODE") 2 rows selected. 4、DELETE 操作 DEST_CHILD 表有一个到dest表的外键约束,因此如果我们基于DEST表添加一些数据到dest_child
这个异常通常表明在执行数据库操作时违反了数据完整性约束,例如主键冲突、外键约束不满足、唯一约束冲突等。这类问题往往出现在插入、更新或删除数据库记录的场景中。...外键约束不满足:尝试插入或更新一个记录,但其外键值在相关表中不存在。 唯一约束冲突:尝试插入一个违反唯一约束的记录,如某列被定义为UNIQUE,但新插入的值已经存在。...System.err.println("Integrity constraint violation: " + e.getMessage()); } else {...四、正确代码示例 为了避免这个异常,我们应该在插入或更新记录之前进行校验,确保不违反任何完整性约束。...五、注意事项 数据校验:在插入或更新数据库记录之前,始终进行必要的数据校验,以确保不违反任何完整性约束。
: ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; 删除/更新行为: 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新...(与RESTRICT一致) RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新。...(与NO ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。...SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为ul(这就要求该外键允许取null) SET DEFAULT 父表有变更时,子表将外键列设置成一个默认的值...ON DELETE CASCADE; ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名)ON UPDATE
外键约束的删除/更新行为 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与RESTRICT一致) RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与NOT ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表总的记录。...主表字段名) on update cascade on delete cascade -- 添加外键约束并指定外键的删除和更新行为 alter table emp add constraint...-- 添加外键约束并指定外键的删除和更新行为 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
) (3)如果before触发器失败,则MySQl将不执行请求的操作,此外如果before触发器或语句本身失败,MySql将不执行after触发器(如果有的话) 3.1.2 触发器的删除 DROP...TRIGGER trigger_name; 注:触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,然后再重新创建 3.2 触发器约束 假设有张用户消费表,每次用户购买一样物品后其金额都是减的...外键约束 外键用来保证参照完整性,MySQL数据库的MyIsAM存储引擎本身并不支持外键,对于外键的定义只是起到一个注释的作用,而InonoDB存储引擎则完整支持外键约束。...一般来说,称被引用的表为父表,引用的表称为子表,外键定义时的on delete和on update表示在对父表进行delete和updata操作时,对子表所做的操作。...(4)RESTRICT 表示父表发生delete或update操作时,抛出错误,不允许这类操作发生,如果定义外键时没有指定on delete或on update,RESTRICT就是默认的外键设置
外键相对于主键而言,用来引用其他表。外键通过子表的一个或多个列对应到父表的主键或唯一键值,将子表的行和父表行建立起关联关系。 例如,Sakila 示例数据库中的 country 表和 city 表。...它是可选的; 位于 FOREIGN KEY 关键字之后的是作为外键的列名; 位于 REFERENCES 关键字之后的是被引用的表和列; ON DELETE 和 ON UPDATE 指定了删除或更新被引用的表中的数据时要采取的约束策略...我们可以使用以下 3 个策略中的一个: CASCADE:如果被引用的表中的一行被删除或更新,该表中匹配行的值会自动删除或更新。...它可以通过名字删除任何约束,并不仅仅是外键; 3.2.4、CASCADE 策略 如果外键的 ON DELETE 和 ON UPDATE 使用了 CASCADE 策略: 当父表的行被删除的时候,子表中匹配的行也会被删除...当父表的行的键值更新的时候,子表中匹配的行的字段也会被更 3.3、唯一键约束 唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。
领取专属 10元无门槛券
手把手带您无忧上云