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

MySQL外键约束On Update和On Delete的使用说明

https://cloud.tencent.com/On Update和On Delete是SQL语言的一个标准,用于数据库外键定义,设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则...On Update表示主键表中被参考字段的值被更新时,On Delete表示主键表中被参考字段的值被删除时。...null3.set default 表示设置为默认值4.cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除。...级联更新时,依据的是之前匹配的数据,在主表更新关联的外键字段的值后,系统自动更新从表的相应外键字段的值,而不是其他未设置为主外键关联的字段,不是主外键关联的字段不受影响。...当我们删除表a内id为‘20200001’的数据,发现表b内pid 为“20200001”的两条数据也被数据库自动删除了,这就是级联删除

12510

【MySQL】外键约束的删除和更新总结

外键约束的删除/更新行为 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与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...dept(id) on update set null on delete set null ; 测试: 删除dept表中的第一行,然后刷新,我们可以看到emp表中的id为1的数据全部置为null了。

63210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【重学 MySQL】六十六、外键约束的使用

    【重学 MySQL】六十六、外键约束的使用 在MySQL中,外键约束是一种重要的数据库约束,用于确保表中的数据完整性。...外键约束的删除 如果不再需要外键约束,可以使用ALTER TABLE语句将其删除。...外键约束的约束等级 在MySQL中,外键约束的约束等级决定了当主表中的记录被更新或删除时,子表中相应的外键记录将如何响应。...外键约束的级联操作 级联删除:当主表中的记录被删除时,如果子表中有依赖于该记录的外键,则这些外键对应的记录也将被自动删除。这可以通过在创建外键约束时指定ON DELETE CASCADE选项来实现。...综上所述,外键约束在MySQL中扮演着重要的角色,它有助于维护数据库中的数据完整性和一致性。在使用外键约束时,需要确保满足其创建条件,并正确地创建和删除外键约束。

    13110

    MySQL实战七:你不知道的外键与约束使用!

    ,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...如果没有使用`on delete/update cascade`,不能删除或更新父表数据,当删除父表的数据时候报错!...cascade 不能更新父表主键或子表外键,删除父表主键数据会将子表联同删除,删除子表外键数据不影响父表。...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。

    4.3K20

    MySql数据库约束

    在InnoDB存储引擎中,域完整性可以通过以下途径来保证:   a. 选择适合的数据类型确保一个数据值满足条件   b. 外键(Foreign Key)约束   c. 编写触发器   d....) (3)如果before触发器失败,则MySQl将不执行请求的操作,此外如果before触发器或语句本身失败,MySql将不执行after触发器(如果有的话) 3.1.2 触发器的删除   DROP...外键约束 外键用来保证参照完整性,MySQL数据库的MyIsAM存储引擎本身并不支持外键,对于外键的定义只是起到一个注释的作用,而InonoDB存储引擎则完整支持外键约束。...一般来说,称被引用的表为父表,引用的表称为子表,外键定义时的on delete和on update表示在对父表进行delete和updata操作时,对子表所做的操作。...(4)RESTRICT   表示父表发生delete或update操作时,抛出错误,不允许这类操作发生,如果定义外键时没有指定on delete或on update,RESTRICT就是默认的外键设置

    1.2K10

    【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空

    如果不带条件,则会删除表中的所有行。 注意事项: DELETE FROM 可以带有 WHERE 子句来指定删除条件。 DELETE FROM 操作可以被事务包围,允许回滚。...可以通过WHERE子句指定删除条件,如果没有条件则删除所有行。此外,DELETE操作会触发相关的触发器和外键约束。...触发器和外键约束 TRUNCATE TABLE:TRUNCATE操作不会触发与表相关的触发器,也不会检查外键约束。因此,如果表被其他表的外键所引用,则可能无法直接TRUNCATE该表。...DELETE FROM:DELETE操作会触发与表相关的触发器,并且会检查外键约束。如果尝试删除的行被其他表的外键所引用,则DELETE操作会失败并返回错误。...使用建议 如果需要快速清空表中的所有数据,并且不关心自增主键计数器的重置、触发器的触发或外键约束的检查,可以使用TRUNCATE TABLE。

    13310

    MySQL数据库,从入门到精通:第十七篇——MySQL 触发器的使用方法及注意事项

    MySQL数据库,从入门到精通:第十七篇——MySQL 触发器的使用方法及注意事项 第17篇_触发器 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息...当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。 2....为了解决这个问题,我们就可以使用触发器,规定每当进货单明细表有数据插入、修改和删除的操作时,自动触发 2 步操作: 1)重新计算进货单明细表中的数量合计和金额合计; 2)用第一步中计算出来的值更新进货单头表中的合计数量与合计金额...4.3 注意点 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...例如:基于子表员工表(t_employee)的DELETE语句定义了触发器t1,而子表的部门编号(did)字段定义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),并且该外键加了

    46111

    第17章_触发器

    当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。 # 2....为了解决这个问题,我们就可以使用触发器,规定每当进货单明细表有数据插入、修改和删除的操作时,自动触发 2 步操作: 1)重新计算进货单明细表中的数量合计和金额合计; 2)用第一步中计算出来的值更新进货单头表中的合计数量与合计金额...# 4.3 注意点 注意,如果在子表中定义了外键约束,并且外键指定了 ON UPDATE/DELETE CASCADE/SET NULL 子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...例如:基于子表员工表(t_employee)的 DELETE 语句定义了触发器 t1,而子表的部门编号(did)字段定义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),...并且该外键加了 “ON DELETE SET NULL” 子句,那么如果此时删除父表部门表(t_department)在子表员工表(t_employee)有匹配记录的部门记录时,会引起子表员工表(t_employee

    24020

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

    */ /*定义sno为外键参考student表的主键sno,并且实现级联删除更新SC表中相应的元组 */ /* 提示 foreign key .. references ... on delete...cascade on update cascade, /*定义Cno为外键参考course表的主键Cno,并且实现级联删除SC表中相应的元组 */ );  2....外键约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名)  ON DELETE CASCADE...删除约束 删除主键约束:alter table 表名 drop primary key; 删除外键约束:alter table 表名 drop foreign key 外键(区分大小写);...这里我创建外键的时候 sno 中有些表有主键约束,有些却没有,所以当我删除主键约束的时候它会提示外键被错误建立起来了。但我不明白为什么建立外键的时候没有报错。

    1.5K40

    MySQL触发器

    触发器概述  MySQL从 5 . 0 . 2 版本开始支持触发器。 MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一 段程序。...当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来 实现。...为了解决这个问题,我们就可以使用触发器,规定每当进货单明细表有数据插入、修改和删除的操作 时,自动触发 2 步操作: 1)重新计算进货单明细表中的数量合计和金额合计; 2)用第一步中计算出来的值更新进货单头表中的合计数量与合计金额...注意点 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...例如:基于子表员工表(t_employee)的DELETE语句定义了触发器t1,而子表的部门编号(did)字段定义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),并且该外键加了

    3.2K20

    数据库对象

    因为数据只有一份,试图就是他的一种显示形式 试图本省的删除,不会导致对基表中数据的删除。 视图不仅可以创建在一个表或者多个基本表上, 还可以创建在一个或者多个已经定义好的视图上。...也就是说,如果一个表中的某个字段(外键)引用了另一个表中的一个字段(主键),那么这个外键值必须存在于被引用的主键表中,否则就会违反参照完整性。...触发器又叫事件-条件-动作规则 创建触发器 : CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name...[FOR EACH ROW]:指定触发器的执行方式,对于每一行数据是否执行一次。 [WHEN condition]:指定触发器执行的条件,如果条件不满足,则触发器不会执行。...执行该表上的BEFORE触发器 2. 执行该表上的SQL语句 3. 执行该表上的AFTER触发器

    13010

    MySQL 中的 REPLACE INTO语法

    FROM another_table; REPLACE INTO 的工作机制 检查是否有冲突: MySQL 会检查插入行的主键或唯一键约束是否冲突。 如果没有冲突: 行被直接插入。...如果有冲突: MySQL 会先删除冲突的行。 然后插入新的行。 注意: 删除和插入操作会触发相应的 DELETE 和 INSERT 触发器。 删除旧行时,可能导致主键或唯一键被重新分配。...否 是(当删除旧记录时会触发 DELETE 触发器) 主键/唯一键约束 插入失败或更新(INSERT ON DUPLICATE KEY UPDATE) 删除冲突记录后插入新记录 注意事项 性能问题...触发器行为: 如果表有触发器(DELETE 或 INSERT),在使用 REPLACE INTO 时,触发器会被依次触发,可能导致意外行为。...外键约束: 如果表定义了外键约束,删除旧记录可能导致外键相关的约束失败。 数据丢失: REPLACE INTO 会直接删除冲突的行,如果删除的行中包含重要数据,可能导致数据丢失。

    10110

    学习SQLite之路(三)

    重命名列,删除一列,或从一个表中添加或删除约束都是不可能的。  3. SQLite  joins:用于结合两个或多个数据库中表的记录。...一旦主连接计算完成,外连接(OUTER JOIN)将从一个或两个表中任何未连接的行合并进来,外连接的列使用 NULL 值,将它们附加到结果表中。...,外连接的列使用 NULL 值,将它们附加到结果表中。...WHEN 子句和触发器(Trigger)动作可能访问使用表单 NEW.column-name 和 OLD.column-name 的引用插入、删除或更新的行元素,其中 column-name 是从与触发器关联的表的列的名称...BEFORE 或 AFTER 关键字决定何时执行触发器动作,决定是在关联行的插入、修改或删除之前或者之后执行触发器动作。 当触发器相关联的表删除时,自动删除触发器(Trigger)。

    3K70

    Mysql数据库基础知识总结,结构分明,内容详细

    前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。...PRIMARY KEY 主键(非空且唯一)约束 FOREIGN KEY 外键约束 CHECK 检查约束 DEFAULT 默认值约束 c.如何指定自增约束 特点和要求 (1)一个表最多只能有一个自增长列...a.触发器的创建 创建触发器语法 CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块...注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此 时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作...例如:基于子表员工表(t_employee)的DELETE语句定义了触发器t1,而子表的部门编号(did)字段定 义了外键约束引用了父表部门表(t_department)的主键列部门编号(did),并且该外键加了

    1.2K41

    六年开发经验,整理Mysql数据库技巧笔记,全网最详细的笔记集合!

    KEY 外键名; 建表后单独添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名); 外键的级联更新和级联删除...DROP FUNCTION 函数名称; 触发器 触发器是与表有关的数据库对象,可以在 insert、update、delete 之前或之后触发并执行触发器中定义的 SQL 语句。...触发器分类 创建触发器 DELIMITER $ CREATE TRIGGER 触发器名称 BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名 FOR EACH ROW BEGIN...MyISAM 存储引擎:访问快,不支持事务和外键操作。使用场景:以查询操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高!...InnoDB 存储引擎:支持事务和外键操作,支持并发控制,占用磁盘空间大。(MySQL 5.5版本后默认) 使用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作!

    1.4K20

    SQL表之间的关系

    SQL表之间的关系要在表之间强制执行引用完整性,可以定义外键。修改包含外键约束的表时,将检查外键约束。定义外键有几种方法可以在InterSystems SQL中定义外键:可以定义两个类之间的关系。...默认情况下,当删除带有外键的行时,InterSystems IRIS将在相应的被引用表的行上获取长期(直到事务结束)共享锁。这样可以防止在引用行上的DELETE事务完成之前对引用行进行更新或删除。...这样可以防止删除引用行,然后回退删除引用行的情况。如果发生这种情况,外键将引用不存在的行。...如果使用NoCheck定义外键,或者使用%NOCHECK或%NOLOCK指定引用行的DELETE,则不会获取此锁定。...例如,如果删除操作因违反外键引用完整性而不能执行,则不会执行BEFORE DELETE触发器。在父/子关系中,没有定义子元素的顺序。 应用程序代码不能依赖于任何特定的顺序。

    2.5K10

    MySQL系列专题(2)-MySQL的SQL语句和高级特性

    ,则不允许对父表对应候选键进行update/delete操作 Restrict 同no action, 都是立即检查外键约束 Set null 在主表上update/delete记录时,将子表上匹配记录的列设为...null 注: trigger不会受外键cascade行为的影响,即不会触发trigger NULL、RESTRICT、NO ACTION 删除:从表记录不存在时,主表才可以删除。...trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句 所以可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE...4、外键约束:foreign key ;保证一个表中的数据匹配另一个表中的值的参照完整性。...不使用索引 1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求. 2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大

    3.7K10
    领券