首页
学习
活动
专区
圈层
工具
发布

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

外键约束的删除/更新行为 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与RESTRICT一致) RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与NOT ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表总的记录。...SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置该子表中该外键值为null(这就要求该外键允许取null)。...id改为6,emp表中的id也会跟着改变 当我们删除父表中id为6,我们可以看到子表emp中存在外键关联的数据也会被删除。

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

    mysql如何添加一个表的外键

    1:创建一个父表,主键作为子表的外键: 1 create table province( 2 pId int primary key auto_increment, 3 pName varchar...(20) 4 ); 2:创建子表,外键是父表的主键: 1 create table user( 2 userId int primary key auto_increment, 3 userName varchar...(40), 4 pid int, 5 foreign key(pid) references province(pId) 6 ); 给一张表添加外键,即给子表的外键添加主键的规则: 在子表声明一个字段pid...int,用于作为子表的外键,foreign key(子表的外键字段) references 父表的表名(父表的主键的字段名); 3:当创建好数据表时添加外键约束: alter table user add...foreign key(pid) references province(pId); alter table 子表的数据表名 add foreign key(子表的外键名称) references 父表的数据表名称

    5.5K70

    MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?

    文章目录 前言 一、插入新数据时报错外键约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理外键约束?...总结 ---- 前言 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束,插入命令如下: insert into course(cno,cname,cpno,ccredit) values('1','数据库...但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。 四、如何处理外键约束?...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

    3.7K20

    MySQL 数据库添加数据时为什么会产生外码(外键)约束?原理就是什么?如何解决?

    文章目录 前言 一、插入新数据时报错外键约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理外键约束?...总结 ---- 前言 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束。...但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。 四、如何处理外键约束?...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

    3.3K31

    详解数据库InnoDB存储引擎

    InnoDB是MySQL数据库中最常用的存储引擎之一,它是一个支持ACID事务的高性能引擎,提供了一些重要的功能,如行级锁定、外键约束和崩溃恢复等。...MVCC允许多个事务同时访问同一数据,而不会相互干扰或阻塞。每个事务都有自己的版本号,当一个事务修改数据时,会创建一个新的版本,而旧的版本会保留在数据库中,以供其他事务使用。...这意味着当一个事务修改某一行数据时,其他事务无法同时修改该行数据。这样可以避免并发更新时的数据冲突。 此外,InnoDB还支持外键约束。这意味着可以在不同的表之间建立关系,并强制执行这些关系。...例如,当删除一个表中的数据时,可以自动删除与该表相关联的其他表中的数据,以保持数据的一致性。 2....总结 InnoDB存储引擎是MySQL数据库中最常用的存储引擎之一,它支持ACID事务、MVCC技术、行级锁定和外键约束等重要功能,提供了高性能和可靠性。

    79620

    mysql常见的建表选项和约束

    create table选项 指定列选项:default 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认值,将自动得到默认值 ;如果没有,则为null。...参照完整性约束,保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或者是两个表的两个字段之间的参照关系 注意: 具有外键约束的列的值不能随便给,必须满足外键所引用的主键的取值 一张表中可以定义多个外键...dept(deptid) 外键的删除规则 当删除父表中的行时,如果子表中有依赖被删除的父行的子行存在,那么就不允许删除,并抛出异常(默认对外键使用on delete restrict或on delete...no action选项) 在定义外键约束时,可以通过使用on delete cascade或on delete set null来改变外加的默认删除规则 on delete cascade:级联删除,...当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么联通子行一起删除,相当于rm -f on delete set null:当删除父表中的行时,如果子表中有依赖于被删除的父行的子行存在,那么不删除

    1.5K10

    Python面试题大全(四):数据库篇

    目录 数据库 MySQL 198.主键 超键 候选键 外键 199.视图的作用,视图可以更改么?...---- 数据库 MySQL 198.主键 超键 候选键 外键 主键:数据库表中对存储数据对象予以唯一和完整标识的数据列或属性的组合。...1.delete 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作。...不过memcache还可以用于缓存其他东西,例如图片,视频等等 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储 3、虚拟内存-redis当物流内存用完时...1,codis 目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据客恢复到新hash节点 2redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性

    68410

    MySQL核心操作深度解析:从CRUD语句到高性能数据库实践

    :REPLACE是删除后插入,如果表有自增主键,会消耗一个新的ID,并且如果该行被其他表的外键引用,可能导致外键约束错误。...INSERT IGNORE:当插入遇到错误(如重复键)时,IGNORE关键字会使MySQL忽略该错误并生成一个警告,而不是终止语句执行。...同时,如果插入的表有外键约束,MySQL会在插入前检查引用完整性。这些都会带来额外的开销,在设计高性能写入系统时需要予以考虑。...,那么删除父表中的一行,会自动删除子表中所有相关联的行。...它通过在内部维护数据的多个版本来实现。每个事务在开始时,会看到一个数据的“快照”。当执行写操作(UPDATE/DELETE)时,InnoDB不会立即覆盖旧数据,而是将旧数据标记为删除,并插入新版本。

    14810

    MYSQL-数据引擎(InnoDB)

    多个用户可以同时读写同一张表的不同行,写操作不会阻塞读操作(基于 MVCC),写操作之间也只在同一行上才会阻塞。 3....外键约束 (Foreign Key Support) InnoDB 是 MySQL 中唯一原生支持外键约束的常用存储引擎。 作用: 强制保持数据的参照完整性。...当你尝试删除或更新父表(主键表)中的一条记录时,InnoDB 会根据定义的规则(RESTRICT, CASCADE, SET NULL 等)自动处理子表(外键表)中的对应数据,防止出现“孤儿数据”。...这是实现高并发性能的关键技术。 工作原理: 它为每一行数据维护了多个版本(通常是两个隐藏字段:创建版本号和删除版本号)。...当一个事务开始时,它只能看到在它开始之前就已经提交的数据版本(通过 Undo Log 构建),而看不到其他未提交事务或在其之后提交的事务所做的修改。

    14610

    【MySQL 系列】MySQL 语句篇_DDL 语句

    我们需要同步修改的代码可能包括那些使用了此表的:存储过程、视图、函数、触发器、外键约束 (在较旧的 MySQL 版本中)以及应用程序。...当读取该列时,MySQL 自动计算该列的值; 存储生成列:当插入或修改数据时,MySQL 自动计算该列的值并存储在磁盘上。...当读取该列时,MySQL 自动计算该列的值。...RESTRICT: 如果被引用的表中的一行在该表中有匹配的行,试图删除或更新被引用的表中行时会引发 MySQL 错误。这是默认的策略。...它可以通过名字删除任何约束,并不仅仅是外键; 3.2.4、CASCADE 策略 如果外键的 ON DELETE 和 ON UPDATE 使用了 CASCADE 策略: 当父表的行被删除的时候,子表中匹配的行也会被删除

    2K10

    mysql基本命令

    进阶 1.外键 外键适用于一对多,一对一,多对多三种情况 一对多 典型案例员工与部门,一个部门对应于多个员工,一个员工对应于一个部分,所以要在员工表中设置部门id列,并设置为外键,与部门表id关联。...mysql中如何控制事务 通过select @@autocommit;语句查询自动提交是否开启,1表示开启,0表示没有开启 当查询结果为1时,自动提交开启,执行sql语句(insert into,alter...同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。...那么,以后就会发生操作第一个事务的用户在新开启的事务中发现表中还有没有修改的数据行,就好象发生了幻觉一样(用户1开启事务查看数据,然后同时有用户2开启事务对数据修改并提交,用户1在当前事务没有发现数据改变...一个表只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 外键:在一个表中存在的另一个表的主键称此表的外键。

    1.6K10

    ⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....

    约束 ⑦【MySQL】约束条件 1. 约束的基本使用 2. 外键约束 ⑦【MySQL】约束条件 1. 约束的基本使用 约束: 什么是约束? 约束是作用于表中字段上的规则,用于限制存储在表中的数据。...外键约束 如何添加外键约束?: 方式一(在创建表时指定外键约束): CREATE TABLE 表名( 字段名 数据类型, ......外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名); 外键的删除/更新行为: NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除...(与NO ACTION行为一致) CASCADE:在父表进行更新/删除时,首先检查记录是否存在外键,存在则同时对外键关联的子表进行相应的更新/删除 SET NULL:在父表进行更新/删除时,首先检查记录是否存在外键...,存在则将外键关联的字段值设置为null(前提是外键关联字段可以为null) SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb

    1.1K100

    MySQL 中的 REPLACE INTO语法

    MySQL 中的 REPLACE INTO 语法 REPLACE INTO 是 MySQL 中的一种特殊语句,用于在插入数据时检测是否存在冲突。...如果目标表中已存在与新插入行的主键(PRIMARY KEY)或唯一键(UNIQUE KEY)冲突的记录,则会删除旧记录并插入新记录。...如果有冲突: MySQL 会先删除冲突的行。 然后插入新的行。 注意: 删除和插入操作会触发相应的 DELETE 和 INSERT 触发器。 删除旧行时,可能导致主键或唯一键被重新分配。...否 是(当删除旧记录时会触发 DELETE 触发器) 主键/唯一键约束 插入失败或更新(INSERT ON DUPLICATE KEY UPDATE) 删除冲突记录后插入新记录 注意事项 性能问题...外键约束: 如果表定义了外键约束,删除旧记录可能导致外键相关的约束失败。 数据丢失: REPLACE INTO 会直接删除冲突的行,如果删除的行中包含重要数据,可能导致数据丢失。

    66910

    【Java 进阶篇】MySQL外键约束详解

    5.3 修改外键约束 要修改外键约束,通常需要先删除旧的外键约束,然后再添加新的外键约束。...例如,如果要更改订单表上的客户外键约束,可以按照以下步骤进行: 删除旧的外键约束: ALTER TABLE 订单表 DROP FOREIGN KEY 客户ID; 添加新的外键约束: ALTER TABLE...6.3 使用级联操作谨慎 当使用级联操作时,要特别小心,确保其不会导致意外的数据删除或更新。建议仔细测试级联操作的影响。 7....这些索引需要维护,因此在插入、更新和删除操作时会导致额外的开销。 级联操作: 当使用级联操作时,数据库需要执行额外的删除或更新操作,这可能会导致性能下降。...如果您在使用外键约束时遇到问题或需要进一步的帮助,请随时咨询数据库专家或参考MySQL官方文档。

    1.7K30

    MySQL数据库表约束详解

    通常,CHANGE子句用于在修改列的数据类型或其他属性时同时更改列名。如果您只想更改列的数据类型或属性而不更改列名,就像您的示例中所做的那样,您需要重复列名。...| id | name | +------+------+ | 01 | aaa | | NULL | bbb | +------+------+ 7.外键: 如何理解外键约束?...所以我们需要在从表上建立外键约束将主表的班级的和从表的班级进行一个外键的约束,这样保证我们每次插入和删除数据都是正确的!...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入 语法: foreign key (字段名)...references 主表(列) 外键的作用: 建立从表和主表的关联关系 产生外键约束 对上面的示意图进行设计: 先创建主键表 create table myclass ( id int primary

    86000

    MySQL——锁(全面总结)

    因为读取并不会改变行的数据,所以可以多个事务同时获取共享锁,称这种情况为锁兼容。但若有其他的事务T3想获得行R的排他锁,则其必须等待事务T1、T2释放行r上面的共享锁,称这种情况为锁不兼容。...对于辅助索引,当执行类似select * from z where b = 3 for update;加锁语句时,会加上临键锁,并且下一个键值的范围也会加上间隙锁。...这也很好理解,修改和删除某一行的时候,必须获得强锁,禁止这一行上的其他并发,以保障数据的一致性。) InnoDB支持多粒度锁定,这种锁定允许事务在行级上的锁和表级上的锁同时存在。...参考:http://blog.itpub.net/15498/viewspace-2141640/ 外键与锁 如果没有为外键显式添加索引,InnoDB自动为外键创建索引,这样子避免表锁。...ID UPDATE 实际上是删除旧行,插入新行。

    6.8K40

    MySQL Innodb和Myisam

    使用外键,检查插入、更新和删除以确保它们不会导致相关表之间的不一致。...当二级索引列被更新时,旧的二级索引记录被删除标记,新记录被插入,并最终被删除标记记录被清除。 当二级索引记录被删除标记或二级索引页被更新的事务更新时,InnoDB在聚集索引中查找数据库记录。...列表的中点是新子列表尾部与旧子列表头部相交的边界。 当InnoDB将页读入缓冲池时,它最初将它插入到中点(旧子列表的头部)。...当 MySQL 删除一个表或一个数据库时,它会删除一个或多个.frm文件以及InnoDB数据字典中的相应条目。 不能InnoDB简单地通过移动.frm 文件在数据库之间移动表。...是更好的选择 对INSERT或UPDATE有很好的支持;DELET时,InnoDB不会重新建立表,而是一行一行的删除 表的具体行数 MyISAM只要简单的读出保存好的行数,当count(*)语句包含 where

    2.3K20

    MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    : 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与 RESTRICT 一致) 默认行为 RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与 NO ACTION 一致) 默认行为 CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则 也删除/更新外键在子表中的记录。...SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表 中该外键值为null(这就要求该外键允许取null)。...,进行拆分使用 实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) 多表查询概述: 指从多张表中查询数据 当我们同时查询两张表时,会出现笛卡尔积现象,我们的目的就是消除多余的笛卡尔积

    2.1K40
    领券