NO ACTION
指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。
CASCADE、SET NULL 和 SET DEFAULT
允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。
ON DELETE CASCADE
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
ON UPDATE CASCADE
指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )
ON DELETE SET NULL
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
ON DELETE SET DEFAULT
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
ON UPDATE SET DEFAULT
指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
分享到:
相关推荐
此外,可以通过设置外键约束的行为来调整其在插入和删除时的行为,如ON DELETE CASCADE(级联删除)、ON DELETE SET NULL(设置外键为空)或ON DELETE NO ACTION(禁止删除)。这允许根据业务需求来定制外键的处理...
MySQL中的外键约束是数据库设计中的一个重要概念,用于维护数据库中的引用完整性,确保表与表之间的数据关联正确无误。本文将深入探讨外键的作用、使用条件、创建语法以及通过案例来演示其实际应用。 首先,外键的...
在SQL Server数据库管理系统中,`CASCADE` 是一个重要的约束类型,它主要用于定义外键约束时的行为。本篇文章将深入探讨 `CASCADE` 的含义、作用以及如何在实际操作中使用它,同时通过具体示例帮助理解其工作原理。 ...
常见的触发限制参数有ON DELETE和ON UPDATE,它们可以设置成多种参数,包括CASCADE(级联删除或更新)、RESTRICT(限制删除或更新)、SET NULL(将引用列置为空)和SET DEFAULT(设置默认值)。不加参数时,默认行为...
通过以上分析,我们可以看到,在SQL Server 2008中创建外键约束时,ON DELETE NO ACTION 是一个有效的选择,它可以有效地避免因删除操作而导致的数据不一致问题。同时,我们也学习到了如何使用ALTER TABLE语句创建...
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] ``` - `CONSTRAINT symbol`:可选,用来为外键约束命名,如果不...
- **NO ACTION**:不允许删除或更新操作,如果这样做会导致外键约束违反。 #### 示例代码分析 以下是一些具体的示例代码,这些代码演示了如何在SQL Server中创建表、插入数据以及设置外键约束,并展示了不同层叠...
4. **NO ACTION**:类似于RESTRICT,但只在删除或更新操作之前检查是否有相关行存在。 5. **SET DEFAULT**:将子表中的外键字段设置为其默认值。 #### 五、示例代码解析 1. **插入数据**: ```sql INSERT INTO ...
通过不同违反外键约束的策略(NO ACTION/RESTRICT/CASCADE/SET NULL),可以理解这些策略如何影响数据更新或删除操作。例如,NO ACTION策略在试图违反约束时会阻止操作,RESTRICT策略在父表记录被删除时也会阻止删除...
ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT} ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT} ``` - `RESTRICT`:阻止父表的更新或删除,如果这会导致子表中...
3. 级联操作:通过设置`on delete`和`on update`规则,可以实现当父表数据发生变化时,子表相应数据的自动更新或删除,如`cascade`(级联)、`restrict`(限制)、`set null`(设为空)和`set default`(设默认值)...
这可以是NO ACTION(默认,返回错误并回滚操作)、CASCADE(更新或删除引用表中的记录)、SET NULL(将引用表中的外键设为NULL)或SET DEFAULT(将外键设为默认值)。创建、更改和删除约束时,需要注意避免对现有...
外键约束可以设置不同的违约策略,如NO ACTION、RESTRICT、CASCADE、SET NULL,以处理违反约束的情况。 3. 表的创建与重建: - 删除原有表后,使用SQL语言重新创建S、C和SC表,其中S表包含基本约束,C表的cpno引用...
4. NO ACTION(在MySQL中等同于RESTRICT):遵循同样的规则。 表级约束和列级约束的差异在于作用范围。列级约束是在创建或修改列时定义的,而表级约束则独立于列,可以应用于多个列或表的特定条件。 修改数据表...
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] ``` - CONSTRAINT symbol:可选,用于指定外键的名称。 - ...
外键表名>(外键列名) 事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action 例如: ...
java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row:”,这个异常通常表明试图删除或更新的记录与数据库中的其他记录存在依赖关系,违反了完整性约束,尤其是外键约束。...
- `NO ACTION` 或 `RESTRICT`:阻止对主表的删除或更新操作,如果这会导致子表中违反外键约束。 9. **操作示例**: - 添加外键约束:`ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ... REFERENCES ...` - ...