首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL Server:自引用FK,触发而不是ON DELETE CASCADE

在 SQL Server 中,外键约束可以设置为自引用,这意味着表中的某个外键列引用了同一表中的主键列。在这种情况下,如果删除或更新主键值,可能会触发外键约束,而不是立即删除或更新相关的子记录。

在这种情况下,如果主键值被更新,则会触发 ON UPDATE CASCADE 操作,而不是 ON DELETE CASCADE 操作。这意味着,当主键值被更新时,所有引用该值的子记录也会被更新,以反映新的主键值。

如果您希望在删除主记录时自动删除子记录,则需要在创建外键约束时指定 ON DELETE CASCADE 选项。这将确保当主记录被删除时,所有引用该记录的子记录也将被删除。

总之,自引用外键约束可以在更新主键值时触发 ON UPDATE CASCADE 操作,但不会在删除主记录时触发 ON DELETE CASCADE 操作,除非您在创建外键约束时明确指定了 ON DELETE CASCADE 选项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SqlAlchemy 2.0 中文文档(四十)

与客户端生成的表达式类似,Column.server_default可以适应一般的 SQL 表达式,但通常预期这些将是简单的函数和表达式,不是像嵌入式 SELECT 这样更复杂的情况。...建议对任何文字 SQL 值使用text()构造,不是传递原始值,因为 SQLAlchemy 通常不对这些值执行任何引用或转义。...与客户端生成的表达式类似,Column.server_default可以容纳一般的 SQL 表达式,但是预期这些通常会是简单的函数和表达式,不是更复杂的情况,比如嵌套的 SELECT。...link_to_name – 如果为 True,则column中给定的字符串名称是引用列的呈现名称,不是其本地分配的key。...link_to_name – 如果为 True,则 column 中给定的字符串名称是引用列的渲染名称,不是其本地分配的 key。

25410
  • 【愚公系列】2022年01月 Mysql数据库-约束

    ,索引,触发器等。...完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。...外键级联更新 FOREIGN KEY ON DELETE CASCADE 外键级联删除 2.主键约束 主键约束特点 主键约束包含:非空和唯一两个功能 一张表只能有一个列作为主键 主键一般用于表中数据的唯一标识...主表名(主键列名) ON UPDATE CASCADE ON DELETE CASCADE; -- 删除外键约束 ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1...(id) ON UPDATE CASCADE ON DELETE CASCADE; -- 将王五用户的id修改为5 订单表中的uid也随之被修改 UPDATE USER SET id=5 WHERE

    55110

    MySQL从删库到跑路_高级(一)——数据完整性

    C、引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系。引用完整性确保键值在所有表中一致,不能引用不存在的值.如果一个键。...D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。 ? 2、数据完整性实现方式 ? MySQL不支持Check约束,虽然可以在列上添加check约束,但不起作用。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。...FOREIGN KEY (sid)references student(sid) on delete cascade on update cascade) engine=innodb; 在学生表插入一条记录...`score_fk` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION;

    1.9K20

    重温MySQL外键约束

    如果是后一种情况,则父表与子表是同一个表,这样的表称为参照表,这种结构称为参照。 2、必须为父表定义主键。 3、主键不能包含空值,但允许在外键中出现空值。..._2,其中fk_test_2的uid列上设置外键,关联fk_test_1的表的id列,这里很明显,fk_test_1是父表,fk_test_2是子表,接下来我们进行数据插入实验。...到这里,我们已经知道,外键的存在是为了保证数据的完整和统一性,但是也带来了一点问题,那就是父表中凡是被子表依赖的列,都没办法删除了,这不是我们想要的,有一些数据确实会过期,我们有删除的需求,那么这个时候应该怎么办...foreign key (uid) references fk_test_1(id) on delete cascade; Query OK, rows affected (0.03 sec) Records...这就是cascade的作用,也就是级联删除。

    6.4K10

    MySQL 学习笔记(三):完整性和触发器设计

    cascade on update cascade, foreign key (Cno) references Course(Cno) on delete cascade /*定义(Sno...外键约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名)  ON DELETE CASCADE...on delete cascade on update cascade; alter table SC add constraint SC_Courses foreign key(cno) references...Course(cno) on delete cascade; 发现报错Can't write; duplicate key in table '#sql-1f2_7',发现原来是这里的约束名和前面的重复了...:标识触发事件,取值为 INSERT、UPDATE 或 DELETE; tbl_name:标识建立触发器的表名,即在哪张表上建立触发器; trigger_stmt:触发器程序体,可以是一句SQL语句,或者用

    1.5K40

    Mysql数据库-存储引擎

    存储引擎是基于表的,不是基于库的。所以存储引擎也可被称为表类型。 Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。...为外键 country_innodb(country_id) ON DELETE RESTRICT ON UPDATE CASCADE -- 设置 country_id 级联更新 )ENGINE...针对上面创建的两个表, 从表的外键指定是ON DELETE RESTRICT ON UPDATE CASCADE 方式的, 那么在主表删除记录的时候, 如果从表有对应记录, 则不允许删除, 主表在更新记录的时候...MyISAM :如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。...MERGE :用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用他们。

    5.1K10

    Mysql外键约束

    外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,int...[ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET...CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。 2....前一种情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE RESTRICT; 后一种情况,可以使用ON UPDATE CASCADE ON DELETE CASCADE...`fk_1` FOREIGN KEY ( `category_id` ) REFERENCES `category` ( `id` ) ON DELETE CASCADE ON UPDATE CASCADE

    5.9K81
    领券