展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

随笔分类 -  数据库 / 关系型

摘要:页级锁 页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。 页锁的开销介于表锁和行锁之间,会出现死锁。锁定粒度介于表锁和行锁之间,并发度一般。 每个层级的锁数量是有限制的,因为锁会 阅读全文
posted @ 2022-07-02 18:14 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要:临键锁(Next-Key Locks) 有时候我们既想 锁住某条记录 ,又想 阻止 其他事务在该记录前边的 间隙插入新记录 ,所以InnoDB就提出了一种称之为 Next-Key Locks 的锁,官方的类型名称为: LOCK_ORDINARY ,我们也可以简称为next-key锁 。Next-Ke 阅读全文
posted @ 2022-07-02 15:31 DogLeftover 阅读(38) 评论(0) 推荐(0) 编辑
摘要:页级别:记录锁 记录锁也就是仅仅把一条记录锁上,官方的类型名称为: LOCK_REC_NOT_GAP 。比如我们把id值为8的那条记录加一个记录锁的示意图如图所示。 仅仅是锁住了id值为8的记录,对周围的数据没有影响。 结论 记录锁是有S锁和X锁之分的,称之为 S型记录锁 和 X型记录锁 。 当一个 阅读全文
posted @ 2022-07-02 11:23 DogLeftover 阅读(27) 评论(0) 推荐(0) 编辑
摘要:自增锁(AUTO-INC锁) # 当我们为表的某个列添加 AUTO_INCREMENT 属性时,数据库会自动添加自增锁 CREATE TABLE `teacher` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, P 阅读全文
posted @ 2022-07-02 10:38 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要:简介 为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度, 但是管理锁是很耗资源的事情(涉及获取、检查、释放锁等动作)。因此数据库系统需要在高 并发响应和系统性能两方面进行平衡, 这样就产生了“锁粒度(Lock granularity)” 阅读全文
posted @ 2022-06-30 16:22 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要:简介 从数据操作的类型划分:读锁、写锁 读锁 :也称为 共享锁 、英文用 S 表示。针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,相互不阻塞的。 写锁 :也称为 排他锁 、英文用 X 表示。当前写操作没有完成前,它会阻断其他写锁和读锁。这样就能确保在给定的时间里,只有一个事务能执行写入 阅读全文
posted @ 2022-06-29 06:33 DogLeftover 阅读(32) 评论(0) 推荐(0) 编辑
摘要:简介 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要 阅读全文
posted @ 2022-06-25 14:14 DogLeftover 阅读(44) 评论(0) 推荐(0) 编辑
摘要:Mini-Transaction redo 日志写入log buffer redo log block的结构图 redo log file相关参数设置 1、innodb_log_group_home_dir :指定 redo log 文件组所在的路径,默认值为 ./ ,表示在数据库的数据目录下。My 阅读全文
posted @ 2022-06-22 17:29 DogLeftover 阅读(56) 评论(0) 推荐(0) 编辑
摘要:redo日志的组成 1、重做日志的缓冲(reldolog buffer),保存在内存中,是易失的。 在服务器启动时就向操作系统申请了一大片称之为redo log buffer的连续内存空间,翻译成中文就是redo日志缓冲 区。这片内存空间被划分成若干个 连续的redo log block。一个red 阅读全文
posted @ 2022-06-22 17:07 DogLeftover 阅读(305) 评论(0) 推荐(0) 编辑
摘要:简介 事务有4种特性:原子性、一致性、隔离性和持久性。 事务的隔离性由 锁机制 实现。 而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。 REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。 UNDO LOG 称为 回滚日 阅读全文
posted @ 2022-06-22 17:01 DogLeftover 阅读(170) 评论(0) 推荐(0) 编辑
摘要:简介 MySQL是一个 客户端/服务器 架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后, 就可以称为一个会话( Session )。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分, 也就是对于服务器来说可能同时处理多 阅读全文
posted @ 2022-06-22 16:21 DogLeftover 阅读(13) 评论(0) 推荐(0) 编辑
摘要:登录mysql后使用如下命令,查看存储引擎对事务的支持情况 SHOW ENGINES # 只有InnoDB 是支持事务 简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态 事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行 阅读全文
posted @ 2022-06-21 07:46 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要:优化数据库结构 拆分表:冷热数据分离 拆分表的思路是,把1个包含很多字段的表拆分成2个或者多个相对较小的表。这样做的原因是,这些表中某些字段的操作频率很高(热数据),经常要进行查询或者更新操作, 而另外一些字段的使用频率却很低(冷数据),冷热数据分离,可以减小表的宽度。如果放在一个表里面,每次查询都 阅读全文
posted @ 2022-06-20 21:32 DogLeftover 阅读(37) 评论(0) 推荐(0) 编辑
摘要:调优的目标 尽可能 节省系统资源 ,以便系统可以提供更大负荷的服务。(吞吐量更大) 合理的结构设计和参数调整,以提高用户操作 响应的速度 。(响应速度更快) 减少系统的瓶颈,提高MySQL数据库整体的性能。 定位调优问题 用户反馈 日志分析 服务器资源使用监控 数据库内部状态监控 调优的维度和步骤 阅读全文
posted @ 2022-06-20 21:26 DogLeftover 阅读(47) 评论(0) 推荐(0) 编辑
摘要:安装步骤 模型类型 概念模型(CDM Conceptual Data Model) 物理模型(PDM,Physical Data Model) 面向对象的模型(OOM Objcet Oriented Model) 业务模型(BPM Business Process Model) 创建概念模型 Fil 阅读全文
posted @ 2022-06-18 17:47 DogLeftover 阅读(25) 评论(0) 推荐(0) 编辑
摘要:三少一多) 数据表的个数越少越好 RDBMS的核心在于对实体和联系的定义,也就是E-R图(Entity Relationship Diagram),数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。 数据表中的字段个数越少越好 字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各 阅读全文
posted @ 2022-06-18 17:45 DogLeftover 阅读(158) 评论(0) 推荐(0) 编辑
摘要:简介 ER模型也叫作实体关系模型,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。在开发基于数据库的信息系统的设计阶段, 通常使用ER模型来描述信息需求和信息特性,帮助我们理清业务逻辑,从而设计出优秀的数据库 ER模型包含的要素 1、实体:可以看做是数据对象,往往对应 阅读全文
posted @ 2022-06-17 16:47 DogLeftover 阅读(1065) 评论(0) 推荐(0) 编辑
摘要:简介 目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF) 和第五范式(5NF,又称完美范式)。 数据库的范式设计越高阶,冗余度就越低,同时高阶的范式一定符合低阶范式的要求,满足最低要 阅读全文
posted @ 2022-06-17 16:46 DogLeftover 阅读(70) 评论(0) 推荐(0) 编辑
摘要:自增ID的问题 可靠性不高 存在自增ID回溯的问题,这个问题直到最新版本的MySQL8.0才修复。 安全性不高 对外暴露的接口可以非常容易猜测对应的信息。比如:/User/1/这样的接口,可以非常容易猜测用户ID的值为多少,总用户数量有多少,也可以非常容易地通过接口进行数据的爬取。 性能差 自增ID 阅读全文
posted @ 2022-06-17 16:45 DogLeftover 阅读(22) 评论(0) 推荐(0) 编辑
摘要:EXISTS和IN的区分 # 大表A驱动小表cc时用in;即当A表的数据量大于B表的数据量时 SELECT * FROM A WHERE cc IN (SELECT CC FROM B); # 当A表的数据量小于B表的数据量时 # 小表A驱动大表cc时用EXISTS ,因为执行时每次是从A中取一条数 阅读全文
posted @ 2022-06-17 16:43 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示