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

【Java 进阶篇】MySQL约束详解

通常用于关联两个,其中一个包含对另一个引用。MySQL中,约束是通过引用字段定义关系来实现。 2....防止数据不一致: 约束可以防止引用删除更新被引用数据时导致数据不一致情况发生。 3....创建约束 MySQL中,要创建约束,需要遵循以下步骤: 步骤1:定义字段 首先,引用中定义一个多个字段,这些字段将用于与被引用字段建立关联。...例如,可以一个订单中使用客户ID作为,与客户客户ID关联,以表示订单与客户之间关联关系。 4.2 复合约束 复合约束是指关联字段多个,它用于建立多个字段组合关联关系。...这些索引需要维护,因此插入、更新和删除操作时会导致额外开销。 级联操作: 当使用级联操作时,数据库需要执行额外删除更新操作,这可能会导致性能下降。

70430

-基础面试题总结

一个只能有一个主键。 (外码) :用来和其他建立联系用,是另一主键,是可以有重复,可以是空值。一个可以有多个。 6. 为什么不推荐使用级联?...大部分人可能会这样回答: 增加了复杂性: a. 每次做DELETE 或者UPDATE都必须考虑约束,会导致开发时候很痛苦, 测试数据极为不方便; b....,因为即使你不使用,你应用层面也还是要保证。...实际,我们知道外也是有很多好处,比如: 保证了数据库数据一致性和完整性; 级联操作方便,减轻了程序代码量; .........SQL 标准定义了四个隔离级别: READ-UNCOMMITTED(读取未提交): 最低隔离级别,允许读取尚未提交数据变更,可能会导致脏读、幻读不可重复读。

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

为什么数据库不应该使用

上述这些分析都是理论定性分析,我们其实可以简单定量分析一下引入对性能影响。...级联操作 当我们关系型数据库中创建约束时,如果使用如下所示 SQL 语句指定更新或者删除记录时使用 CASCADE 行为,那么客户端更新或者删除数据时就会触发级联操作: ALTER TABLE...图 4 - 复杂级联操作 虽然级联删除出发点也是保证数据完整性,但是设计关系之间不同关系时,我们也需要注意级联删除引起数据大规模删除问题。...这种涉及多级级联删除行为在数据量较小数据库中不会导致问题,但是在数据量较大数据库中删除关键数据可能会引起雪崩,一条记录删除可能会被放大到几十倍甚至上百倍,这些对磁盘随机读写会带来巨大开销,是我们想要尽可能避免情况...: RESTRICT 会在更新和删除关系数据时对外约束合法性进行检查,保证不会引用到不存在记录; CASCADE 会在更新和删除关系数据时触发对关联记录更新和删除,在数据量较大数据库中可能会有数量级放大效果

3K10

抖音提前批二面:为啥不推荐使用

大家在学习数据库过程中一定都接触过这个概念,并且各种课后习题中外还是一个非常重要考察内容,但是实际企业开发过程中,你会发现是被严格禁止使用,当需要多个之间进行关联时,做法是冗余相关字段...和主键一样,都是一种约束约束也称为引用约束引用完整性约束): 列必须引用另一个主键唯一列必须满足引用完整性,也就是说,它们包含值必须存在于被引用主键唯一列中...通俗来说: 成绩插入数据时,student_id 必须是学生已存在 id 学生删除/更新数据时,会自动删除/更新成绩中引用 student.id 数据(级联) 为什么不推荐使用?...阿里开发手册中提到: 【强制】不得使用级联,一切概念必须在应用层解决。 定义之后,数据库每次操作都需要去检查约束。...所谓 Database Update Storm,指的是高并发环境下,多个客户端同时对数据库进行大量更新操作,存在锁竞争问题甚至死锁,从而导致数据库性能急剧下降完全崩溃。

17310

【MySQL】04_约束

约束强制规定。 可以创建时规定约束(通过 CREATE TABLE 语句),或者创建之后通过 ALTER TABLE 语句规定约束。...创建(CREATE)时就指定约束的话,先创建主表,再创建从时,先删从删除约束),再删除主表 当主表记录被从参照时,主表记录将不允许删除,如果要删除数据,需要先删除中依赖该记录数据...,然后才可以删除主表数据 “从”中指定约束,并且一个可以建立多个约束列与主表被参照列名字可以不相同,但是数据类型必须一样,逻辑意义一致。...约束关系是针对双方 添加了约束后,主表修改和删除数据受约束 添加了约束后,从添加和修改数据受约束 在从建立,要求主表必须存在 删除主表时,要求从删除将从中外引用该主表关系先删除...约束等级 Cascade方式 :update/delete记录时,同步update/delete掉子表匹配记录 Set null方式 :update/delete记录时,将子表匹配记录列设为

2.4K20

SQL命令 DELETE(一)

不能在此参数中指定值函数联接语法。 FROM clause - 可选-FROM子句,table-ref之后指定。此FROM可用于指定一个多个选择,用于选择要删除行。...参照完整性 如果不指定%NOCHECK, IRIS将使用系统范围配置设置来确定是否执行引用完整性检查;默认情况下执行引用完整性检查。可以系统范围内设置此默认值,如引用完整性检查中所述。...要确定当前系统范围设置,请调用$SYSTEM.SQL.CurrentSettings()。 删除操作期间,对于每个引用,都会在被引用相应行获取一个共享锁。此行将被锁定,直到事务结束。...这可确保引用行在可能回滚删除之前不会更改。 如果将一系列引用定义为级联,则删除操作可能会导致循环引用。 IRIS防止DELETE与级联引用操作一起执行循环引用循环递归。...如果使用%NOLOCK对使用CASCADE、SET NULLSET DEFAULT定义字段执行DELETE操作,则也会使用%NOLOCK执行相应更改引用操作。

2.6K20

MySQL约束

约束 约束是一种限制,它通过对表数据做出限制,来确保数据完整性、唯一性。...varchar(25) - ); - 删除非空约束 * alter table student modify name varchar(20); 默认值:default 设置默认值,即使没有插入值也会有默认值...字段名; 创建之后添加唯一约束:alter table 名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建时添加主键约束...约束 (foreign key , 让多个之间关联,从而保证数据正确性) - 创建时添加约束: - 删除约束:alter table 名 drop foreign key 键名称...; - 添加:alter table 名 add [constraint 键名称] foreign key (字段名称) references 关联主表名(字段名); * 注:键名称可以不指定

1.6K20

MySQL(六)

}(主键); 基本要求 字段需要保证与关联主表主键字段类型一致 基本属性也要相同 如果在后增加,对数据有一定要求 只能使用 innodb 引擎 约束 约束: 通过建立关系之后...约束基本概念 当一个产生时,从会受制于主表数据存在从而导致数据不能进行某些不符合规范操作(不能插入主表不存在数据) 如果一个被其他引入,那么该数据操作就不能随意,必须保证从数据有效性...(不能删除存在数据) 约束概念 可以创建时,对外约束进行选择性操作。...,级联模式,一起操作变化 set null,置空模式,主表变化,从表字段置空,前提是从字段允许为空 常用约束: on update cascade on delete set null; 约束作用...意向锁在原来 X/S 锁之上引入了 IX/IS,IX/IS 都是锁,用来表示一个事务想要在某个数据行加 X 锁 S 锁。

42010

MySQL复习笔记(2)-约束

比如发生意外停机存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据丢失,造成损失是无法弥补与估量。...字段类型 default 值 约束 一个字段引用另一个主键 主表: 主键所在,约束别人,将数据给别人用 副/从所在,被约束,使用别人数据 创建 CREATE...: 参照哪个哪个字段 已有增加 ALTER TABLE 名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) REFERENCES 主表(主键); 删除约束...ALTER TABLE 名 DROP FOREIGN KEY(约束名); 级联 修改和删除主表主键时,同时更新删除键值,称为级联操作 ON UPDATE CASCADE –...KEY AUTO_INCREMENT, NAME VARCHAR(30), age INT, dep_id INT, -- 添加约束,并且添加级联更新和级联删除

87520

MySql---复习

一个可以有一个多个对应是参照完整性,一个可以为空值,若不为空值,则每一个值必须等于另一个中主键某个值。...id值 ---- 小总结 被约束成为副约束别人成为主表,设置 主表(参考)参考字段通常为主键 添加数据时,必须先添加主表,后添加副 修改数据时,必须先修改副,再修改主表...,主键id依然会自增 ---- 想要删除中编号为1部门,就必须先将该部门下所有员工删除 ---- 级联操作 当有了约束时候,必须先修改删除所有关联数据,才能修改删除主表...但是,我们希望直接修改删除主表数据,从而影响副数据,如删除部门某个部门,直接自动删除员工中被删除部门对于所有员工 这就是级联操作 ---- 格式 定义时候追加以下内容: 级联修改:...(字段名) [引用]; 设置级联修改和删除关系 #先将之前约束删除 ALTER TABLE emp DROP FOREIGN KEY emp_depart_fk; #修改时,增加约束级联约束

5.2K30

服务器 数据库设计技巧--1

特殊情况下,它们可能是一对多多对一关系,即一张原始单证对应多个实体,多张原始单证对应一个实体。这里实体可以理解为基本。明确这种对应关系后,对我们设计录入界面大有好处。...这些系统基本完成物理设计之后,立即在基本建立第一层视图,这层视图个数和结构,与基本个数和结构是完全相同。并且规定,所有的程序员,一律只准视图上操作。...4、设计 作为数据库对象,很多人认为麻烦而不用,实际大部分情况下是很有用,理由是:   是最高效一致性维护方法,数据库一致性要求,依次可以用、CHECK约束、规则约束、...谨慎使用级联删除级联更新,级联删除级联更新作为SQL SERVER 2000当年新功能,2005作 了保留,应该有其可用之处。...我这里说谨慎,是因为级联删除级联更新有些突破了传统关于定义,功能有点太过强大,使用前必须确定自己已经把握好其功能范围,否则,级联删除级联更新可能让你数据莫名其妙被修改或者丢失。

1.9K40

day26.MySQL【Python教程】

,包括数据字段类型、约束 字段类型 mysql中包含数据类型很多,这里主要列出来常用几种 数字:int,decimal 字符串:varchar,text 日期:datetime 布尔:bit 约束...注意:语句结尾要使用分号; 远程连接 一般公司开发中,可能会将数据库统一搭建在一台服务器,所有开发人员共用一个数据库,而不是自己电脑中配置一个数据库 运行命令 ?...创建语句如下 ? 思考:怎么保证关系列数据有效性呢?任何整数都可以吗? 答:必须是学生中id列存在数据,可以通过约束进行数据有效性验证 为stuid添加约束 ?...级联操作 删除students数据时,如果这个id值scores中已经存在,则会抛异常 推荐使用逻辑删除,还可以解决这个问题 可以创建时指定级联操作,也可以创建后再修改级联操作...级联操作类型包括: restrict(限制):默认值,抛异常 cascade(级联):如果主表记录删掉,则从中相关联记录都将被删除 set null:将设置为空 no action:什么都不做

2.2K60

Apache Hudi 元数据字段揭秘

_hoodie_record_key 元字段 记录字段用于唯一标识 Hudi 分区中记录。借助记录,Hudi 可以确保没有重复记录,并在写入时强制执行唯一性完整性约束。...通常这些是 a) 删除请求以符合数据保护相关法规和 b) 从上游系统向下传递更新请求。如果没有记录将更改记录链接在一起,可能会导致系统中出现重复记录。...这样做有明显好处,复合情况下,每次重新计算重新处理记录可能很耗时,因为它需要从存储中读取多个列。...此外通过将这种更改跟踪信息与数据一起有效地存储,即使是增量查询也可以从执行所有存储组织/排序/布局优化中受益。...它们通过保持唯一性约束、支持更快目标更新/删除、实现增量处理和时间旅行、支持服务准确高效地运行、安全地处理重复项、时间旅行,维护数据完整性方面发挥着关键作用。

46920

第13章_约束

,需要先删除中依赖该记录数据,然后才可以删除主表数据 (6) “从” 中指定约束,并且一个可以建立多个约束 (7)从列与主表被参照列名字可以不相同,但是数据类型必须一样,...emp引用了,所以部门1001字段对应记录就不能被删除 总结:约束关系是针对双方 添加了约束后,主表修改和删除数据受约束 添加了约束后,从添加和修改数据受约束 在从建立...,要求主表必须存在 删除主表时,要求从删除将从中外引用该主表关系先删除 # 6.7 约束等级 Cascade方式 : update/delete 记录时,同步 update...例如:员工中,可以添加一个员工信息,它部门指定为一个完全不存在部门。 问题 3:那么建和不建约束和查询有没有关系? 答:没有 MySQL 里,约束是有成本,需要消耗系统资源。...也就是说,即使你不用约束,也要想办法通过应用层面的附加逻辑,来实现约束功能,确保数据一致性。

33330

MySQL基础(快速复习版)

:当查询多个时,没有添加有效连接条件,导致多个所有行实现完全连接 如何解决:添加有效连接条件 二、分类 按年代分类: ​ sql92: ​ 等值 ​ 非等值 ​ 自连接 ​ 也支持一部分外连接...该字段值不可重复并且非空 unique+not null FOREIGN KEY:,该字段值引用了另外字段 主键和唯一 1、区别: ①、一个至多有一个主键,但可以有多个唯一 ②、主键不允许为空...,唯一可以为空 2、相同点 都具有唯一性 都支持组合,但不推荐 : 1、用于限制两个关系,从字段值引用了主表字段值 2、列和主表被引用列要求类型一致,意义一样,名称无要求 3、主表被引用列要求是一个...约束名 foreign key(字段名) references 主表(被引用列)) 注意: 支持类型 可以起约束名 列级约束 除了 不可以 约束 除了非空和默认 可以,但对主键无效 列级约束可以一个字段追加多个...名 drop index 索引名; 5、 添加 alter table 名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列

4.5K20

记录不存在则插入,存在则更新 → MySQL 实现方式有哪些?

受影响行:3 ,同时自增主键由 1 变成了 2 3 ,而不是 1 2   有坑   正是因为 replace into 工作原理,不可避免就产生了一些需要注意地方   1、破坏约束     ...如果主键被指定成了其他,那么 replace into 更新(非插入)时影响到了其他约束,那么会执行失败,提示类似信息:     可能很多小伙伴会说:我们开发过程中,会遵循阿里开发手册中规约...,其中有一条规约如下:     我们不用了,也就不会出现前面的 [Err] 1451 错误了     其实阿里开发手册中这条规约,不是说不让我们用,而是说不用数据库层面的约束应用代码层面解决逻辑...    用数据库层面的,问题提示很明显,也不会产生脏数据     而应用层解决,反而使约束数据一致性问题更隐晦,产生脏数据,如下     从此我们踏上了修数据不归路   2、主键加速自增...,可移植性高,也不会引入特定数据库在这方面的缺陷 replace into 方式不推荐(坑有点多),它完全可以由 INSERT UPDATE 替代 INSERT UPDATE 可以减少我们代码

2.1K10

MySQL数据库学习

创建时添加约束 create table 名( ......键名称 foreign key (列名称) references 主表名称(主表列名称); 删除约束 alter table 名 drop foreign key 键名称; 级联操作 分类...级联更新:on update cascade 级联删除:on delete cascade 添加级联操作 alter table 名 add constraint 键名称 foreign key...中间至少包含两个字段,这两个字段作为第三张,分别指向两张主键 数据库范式 设计数据库时,需要遵循一些规范。...要遵循后面的范式要求,必须先遵循前面的所有范式要求 第一范式(1NF) 每一列都是不可分割原子数据项 第二范式(2NF) 1NF 基础,非码属性必须完全依赖于码( 1NF 基础消除非主属性对主码部分函数依赖

4.2K20

MySQL笔记

因为建立关系模型,就要遵循某些规则,比如数据中某字段即使为空仍要分配空间 固定结构,灵活度较低 非关系型数据库 非关系型数据库又被称为NoSQL(Not Only SQL ),意为不仅仅是 SQL...null 创建时,条件唯一约束 create table 名( 字段 类型 unique ); 删除唯一约束 alter table 名 drop index 字段 创建完后...alter table 名 modify 字段 类型 auto_increment 约束:foreign key 创建时,添加 create table 名( 列名...key 键名称 创建之后,添加 alter table 名 add constraint 键名称 foreign key (字段名称) references 主表名称(主表列名称...) 级联操作 添加级联操作 alter table 名 add constraint 键名称 foreign key (字段名称) references 主表名称(主表列名称) on

97810

数据库知识学习,数据库设计优化攻略(一)

聚集索引对查询影响是比较大,这个在下面索引叙述。 ➢ 在有多个,主键选择也比较重要,一般选择总长度小,小比较速度快,同时小可以使主键 B 树结构层次更少。...1.3.4 设计 ➢ 作为数据库对象,很多人认为麻烦而不用,实际大部分情况下是很有用,理由是: ➢ 是最高效一致性维护方法,数据库一致性要求,依次可以用、CHECK...➢ 谨慎使用级联删除级联更新,级联删除级联更新作为 SQL SERVER 2000 当年新功能, 2005 作 了保留, 应该有其可用之处。...我这里说谨慎,是因为级联删除级联更新有些突破了传统关于定义,功能有点 太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除级联更新可能让你数据莫名其妙 被修改或者丢失。...从性能看级联删除级联更新是比其他方法更高效方法。 1.3.5 字段设计 字段是数据库最基本单位,其设计对性能影响是很大

44730
领券