- 博客(91)
- 收藏
- 关注
原创 Mysql 触发器简介
update 触发器中,old 表示修改前的原数据,new 表示将要修改为的数据。old 是只读的,而 new 则可以在触发器中使用 SET 关键字进行赋值。Insert 触发器中,new 表示要插入的那条数据。delete 触发器中,old 表示删除的那条原数据。使用方式:new.字段名称。
2024-03-05 10:46:06
430
原创 Mysql 存储过程简介
数据库中的一类对象,就是一组 sql 语句集,可以调用,还可以有入参,类似于 java 中的方法。如果 sql 语句集关联性很强,使用存储过程可以提高 sql 语句集的原子性。对于经常使用的重复性的 sql 语句集,使用存储过程可以提高工作效率。使用存储过程可以隐藏具体 sql 语句集,提高安全性。
2024-03-05 10:45:58
288
原创 Mysql 视图简介
视图中的数据总是 DQL 执行后的数据,所以对表中原数据进行修改也会影响到视图。保证数据的安全性,对于不同的业务,提供不同的视图,而不是提供全部原表数据。对于一些复杂的 DQL ,我们可以提取为视图,每次对视图进行操作就可以了。我们可以面向视图对象进行增删改查,对视图对象操作会影响原表。在不同角度去看待同一份数据,这份数据我们提取为一个个视图。:只能通过 DQL 语句创建视图。
2024-03-05 10:45:49
196
原创 Mysql 索引为什么要使用 B+ 树作为数据结构
索引是存储在磁盘中的,考虑到索引可能会很大,所以不会一次性全部加载到内存中进行处理,每次 IO 只能取一个节点到内存中,比较后再取下一个节点,直到找到目标关键字。数据量很大时树会变得非常深,导致 IO 次数过多,效率低下。:对于千万数据量的数据库来说,3 到 4 层 B+ 树足够了,也就是最多进行 4 次 IO 便可检索指定数据;范围检索时只需要检索到范围最小值,然后通过叶子节点的指针一直遍历到范围最大值即可。:无法均匀分布数据,浪费空间;:相同层数存储数据量不及 B+ 树;范围查找效率不及 B+ 树。
2024-03-05 10:45:22
241
原创 Mysql 中的锁机制
事务 A B 并发,A B 都获取了数据的共享锁,此时 A B 都想要修改该数据,需要获取该数据的排它锁,出现锁冲突,A 等待 B 释放共享锁,B 等待 A 释放共享锁,进入死锁。通过唯一约束字段索引进行检索时,会在满足条件的记录上添加行锁,满足条件的记录间添加间隙锁;serializable 隔离级别:与 RR 大体相同,只是普通查询相当于 RR 的共享锁查询。RC / RU 隔离级别下只会在满足条件的记录上添加行锁,无论使用什么样的查询条件。(添加锁时,真正锁的是聚簇索引字段)
2024-03-05 10:44:59
379
原创 Mysql 事务隔离级别
事务 A 可以访问到事务 B 尚未提交的更改:一个事务前后读取的同一条记录发生了改变或删除,针对的是 delete 和 update 操作:一个事务按照相同的查询条件查询出的结果集中较之前出现了新数据,针对的是 insert 操作。
2024-03-04 16:45:11
502
原创 Mysql 事务并发时的更新丢失问题悲观锁和乐观锁的解决方案
更新丢失问题的产生悲观锁方式解决更新丢失问题乐观锁方式解决更新丢失问题:需要在余额表上新加一个 version 字段
2024-03-04 16:19:41
356
原创 Mysql 事务的四个特性
一个事务就是一个完整的业务逻辑、一个最小的工作单元,可以提交或回滚,保证多次更改全部成功或失败原子性隔离性持久性一致性
2024-03-04 16:15:55
189
原创 mysql 中常用数据类型介绍
varchar :最大 255 ,代表的是字符;实际使用时会根据数据长度动态分配空间;节省空间,但存储效率稍微慢一些;使用例子:姓名,因为姓名长度不固定char :最大 255 ,代表的是字符;定长字符串,分配固定长度的空间去存储数据;使用不正确会浪费空间,但效率稍微快一点;使用例子:性别,因为性别是固定长度的int:数字中的整数型,等同于 java 中的 int ,占 4 字节bigint:数字中的长整型,等同于 java 中的 long ,占 8 字节float:单精度浮点数double:双
2024-03-04 10:16:34
268
原创 为什么要引入缓存?数据一致性与缓存利用率的优化方向
所有方案都无法做到强一致,就像 CAP 定理中所描述的一样,我们引入缓存的目的就是提高用户感知的可用性,所以也只能在这个基础上尽量提高一致性,追求强一致的结果只能是牺牲可用性,这就与我们引入缓存的初衷背道而驰了。但这就会产生一个悖论,业务体量小的时候一般也不需要引入缓存,因为缓存解决的首要问题就是业务量大时的数据查询效率问题。缓存命中率为百分之百,性能很高,但缓存利用率低,数据一致性取决于定时任务的执行频率。缓存利用率:缓存中只保存热数据,也就是最近访问过的数据,提高缓存利用率。
2024-03-04 09:54:31
496
原创 MySql 深度分页问题优化思路
当我们把页码调高,比如第 10w 页,server 会在存储引擎的主键索引中依次获取第 0 到 10w*10+10=1000010 条完整行数据,然后抛弃不需要的数据行,只留下最后的 10 条,放到 server 层的结果集中,返回给客户端。当我们执行上面的 sql 取第一页的 10 条数据时,server 层会在存储引擎的主键索引中依次获取到第 0 到 10 条完整行数据,并放到 server 层的结果集中,返回给客户端。问题来了,这种方式同样拿十条数据,第一页和第一百页的查询速度是不一样的。
2024-03-04 09:54:01
407
原创 Vue 简介与快速上手
3.大米13Pro</li>\n''<div>你好,欢迎来到大米商城</div>'' <li>1.大米12</li>\n'' <li>2.大米13
2024-03-04 09:53:30
706
原创 慢 Sql 查找与优化思路
MySql 主要定义了三个与慢 Sql 相关的 MySql 系统参数( MySql 系统参数可以通过 show variables like ‘slow_query%’ 语法查看,通过 SET GLOBAL slow_query_log = ON 语法修改)这里我们开启慢 sql 记录,设置日志位置为 D:\Files\slow-query.log ,并设置慢 sql 的阈值为 0.1s (需要重新连接数据库才会生效)虽然叫慢查询日志,但不光会记录 select 语句,其他慢语句也会记录。
2024-03-04 09:53:16
609
原创 递归思想明晰
把一个问题层层转化为一个与原问题相似的规模较小的问题来求解的思路就是递归;逻辑上就是函数自己调用自己。递归策略只需要少量的代码就可以描述出解题过程所需要的多次重复计算,且很多算法只能通过递归实现。学的越多,就会发现不会的越多。我们不就是处在无限递归式自学的模式中嘛。递归思想的运用要解决两个问题。
2024-03-04 09:52:45
155
原创 数据结构之 B 树和 B+ 树
非叶子节点只包含若干关键字和指向其子节点的指针,所以非叶子节点只用来检索,具体数据需要检索到叶子节点来获取叶子节点还额外包含了一个指向下一个叶子节点的指针非叶子节点中的关键字会再次出现在叶子节点中下面是一个简单的三阶 B+ 树的例子。
2024-03-04 09:52:20
1229
原创 数据结构之二叉查找树
弱势在于性能上的不稳定,形式上退化为链表后性能甚至不如链表。所以二叉查找树在实际应用中并不常见,但不失为帮助我们理解更高级数据结构的好帮手。二叉查找树的查找最坏情况就是退化为链表,最好情况可以和有序数组效率相同;增删也不用考虑扩展问题,整体适用性较数组和链表都高。有序数组查找时也可使用二分法进行查找;但劣势较为明显,无法很轻松的进行数组的扩展,且增删较慢。链表的优势在于增删可以通过指针,但弱势很明显,查找需要从头开始遍历。
2024-03-03 11:25:56
192
原创 数据结构之栈和队列
队列:一种可以实现先进先出的数据结构,所有时间相关的操作都可以考虑使用队列;主要使用入队和出队两种算法。栈:一种可以实现先进后出的数据结构;常用于函数调用、表达式求值等场景;主要使用压栈和出栈两种算法。
2024-03-03 11:09:40
362
原创 数据结构之数组和链表及 C 语言表现
新增和删除速度较快,虽然也需要从头节点开始依次访问,但定位到元素后只需要改变指针的指向即可。双链表:每个节点有两个指针域,每个节点之间的指向都是双向的,除了头节点、首节点和尾节点。每个节点只有一个前驱节点和一个后续节点,首节点没有前驱节点,尾节点没有后续节点。常用算法:初始化、遍历输出、追加元素、插入元素、删除元素、排序、倒置等。常用算法:遍历、查找、清空、销毁、求长度、排序、删除节点、插入节点等。类型相同的占用一块定长的连续内存空间的节点集合。类型相同的离散的彼此通过指针相连的节点集合。
2024-03-03 11:08:08
189
原创 设计模式之代理模式及 Java 代码实现
代理分为静态代理和动态代理两种静态代理中代理类需要手动编写;动态代理中代理类通过 Proxy.newInstance() 方法生成。其他没有任何区别代理模式的主要作用及本质,还是在不修改被代理对象的源码上,进行功能的增强代理模式在 AOP 领域很常见,主要用于如日志记录,性能统计,安全控制,事务处理,异常处理等方面我的理解:代理的实质是面向接口中的方法进行编程,当需要对某些方法做一些业务不相关的相同的操作时,我们就可以考虑用代理来实现。
2024-03-03 10:50:19
698
原创 网络协议模型,TCP/IP 协议
网络通信时,首先由 IP 协议在复杂的物理网络中寻找对方的地址并确定一条合适的传输路径;然后由 TCP 协议建立连接并传输信息,为了保证信息传输的可靠与方便,TCP 协议会对信息进行切分,为每个包标注大小和顺序,并有确认机制;Http 协议声明要请求的路径和返回数据的信息长度、信息类型(图片、文字、音频等)等,利用 TCP 协议进行数据传输以完成请求和响应TCP 传输控制协议UDP 用户数据协议
2024-03-03 10:47:14
329
原创 网络、网络通信、ip 地址、域名、DNS 服务器、端口号的概念
网络通信本质上是两台计算机端口间的通信:服务端的端口由客户端指定访问,客户端的端口由 TCP/IP 协议自动分配
2024-03-03 10:11:58
556
原创 SpringAMQP 集成 RabbitMQ
SpringAMQP :基于 AMQP 协议定义的一套 API 规范,提供了模板来发送和接收消息。SpringAMQP 包含两部分,基础抽象 spring-amqp 和底层实现,默认以 spring-rabbit 作为底层实现。AMQP :Advanced Message Queuing Protocol ,应用间消息通信的一种协议,与语言和平台无关。可查看原生实现方式)
2024-03-03 09:52:10
407
原创 Redis 分片集群搭建
执行 redis-cli --cluster create --cluster-replicas 1 192.168.255.128:6379 192.168.255.128:6380 192.168.255.128:6381 192.168.255.128:6389 192.168.255.128:6390 192.168.255.128:6391 命令构建集群(–cluster-replicas 1 表示使用 1 模式,即最简单的模式构建集群,一台主机、一台从机,正好三组)
2024-03-02 11:36:29
652
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人