![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据库
关系型数据库,费关系型数据库,缓存...
拾信
还是喜欢收集知识,放在自己的博客。
想它了又可以看看,离得近,在家,两步路就到了。
展开
-
数据库事务四大特性(ACID),四种隔离级别
事务四大特性和隔离级别有太多东西要学了......分开记录比较好......一.数据库事务的四大特性1.原子性(Atomicity)(数据库的操作):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。这个刚好最近有类似的业务用到了这个性质。(这个性质其实是很常见的)业务:一个用户可以拥有一个自定义的属性,可以自定义多条,但是这个自定义数据的量不是特别大,用户可以自行增加或者删除自定义属性的条数,也可以修改里面的内容。如果是想在不删除用户原有数据下,判断增加删除修改操作还是比较麻原创 2020-10-30 15:07:00 · 537 阅读 · 2 评论 -
乐观锁,悲观锁,共享锁,排它锁,表锁,行锁
乐观锁与悲观锁是一种思想,而不是一种实现。乐观锁适用于读操作多的场景,它总认为不会产生并发问题,因此每次读数据的时候总认为不会有别的线程对数据进行修改,所以每次都不会上锁,但是在更新的时候会同时记录当前version值,用来判断在此期间有没有其他线程对数据进行修改。关键代码:update table set x=x+1, version=version+1 where id=#{id} and version=#{version}; 需要手动在数据库中增加字段version,表示被修改的次数,每次原创 2020-11-12 20:50:29 · 114 阅读 · 0 评论 -
如何设计一个关系型数据库(锁,索引)
目录一.为什么要使用索引?二.什么样的信息能成为索引?三.索引的数据结构?关于锁1.MyISAM和InnoDB关于锁方面的区别是什么?2.数据库事务的四大特性3.事务隔离级别以及各级别下的并发访问问题4.InoDB可重复读隔离级别下如何避免幻读?5.RC、RR级别下的InnoDB的非阻塞读如何实现?数据库最终的是存储。所以首要的是一个存储模块(文件系统),可以存在在机械硬盘或者是固态硬盘,光有存储不行,得需要一个程序实例组织这些数据才能使用。所以大方向下分为存储和程序原创 2020-10-26 23:25:05 · 308 阅读 · 0 评论 -
mysql使用B+-Tree作为索引数据结构的原因
Mysql使用的是B+-Tree,时间复杂度是O(log n)Hash索引的复杂度是O(1),如果是查找一个数的话,使用Hash是很好的选择,但是对于范围查询,模糊查询都不支持,并且由于Hash函数的随机性,通常其对内存的访问也是随机的,会造成频繁的IO,然而在数据库性能调优方面,有一个点就是要减少不必要的IO,然而Mysql并没有放弃这种快速搜索等值的查询方式,而是根据数据库访问频率和模式自动的为数据建立哈希索引,称之为自适应哈希索引。再说说二叉树,如果左子树不为空,则左子树上所有节点均小于根节点原创 2020-11-09 20:03:19 · 139 阅读 · 0 评论 -
定位并优化慢查询sql
1.根据慢日志定位查询1.show VARIABLES like '%QUERY%';查看系统慢日志等其他系统功能信息参数解析long_query_time:超时记录时间slow_query_log_file:慢日志位置2.show status like '%slow_queries%';查看慢日志中包含的慢查询sql语句条数3.set global slow_query_log = on;将状态设置为 on4.set GLOBAL long_query_ti原创 2020-10-22 01:03:47 · 454 阅读 · 0 评论 -
Oracle、Mysql中数据存在则更新,不存在则插入方法
Oracle中使用merge into语句:数据存在则更新,不存在则插入merge into TEST1 t1using DUALon ( t1.ID= 5)when matched then update set t1.NAME = 'xxx'when not matched then insert (id,NAME) values (5,'xxx' );mysql:数据存在则更新,不存在则插入INSERT INTO test(id,name) VALU.原创 2020-11-10 15:05:17 · 1033 阅读 · 0 评论