数据库
文章平均质量分 92
专注MySQL
活在梦里丶
学渣的逆袭之路~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL事务隔离性与隔离级别原理
前言不管我们学习哪一门面向对象语言,在多线程并发环境下,多个线程共同对同一共享资源操作,从而导致资源出现数据错误的问题称为线程安全问题。通常情况下加锁能够很好的处理线程安全问题。不知你有没有思考过,MySQL也是一个支持多线程访问的软件,但是我们再日常开发中好像并没有过多的关注过线程安全问题?其实并不是说MySQL不会发生线程安全问题,而是它太优秀了很多地方都帮我们解决了。事务的隔离性与隔离级别事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。也就是说,原创 2021-01-25 18:23:38 · 823 阅读 · 1 评论 -
如果你不了解InnoDB的存储逻辑,可能你并不是真正搞懂MySQL
InnoDB存储逻辑InnoDB存储引擎的逻辑存储是将所有的数据都逻辑的存放在一个空间中,我们称之为表空间(tablespace)。表空间又是由段(segment)、区(extent)、页(page)组成。如下图表空间(Tablespace)表空间是InnoDB存储引擎逻辑结构的最高层,所有数据都放在表空间ibdata1里。在MySQL5.6之后默认每张表单独一个表空间,通过...原创 2020-05-04 02:36:53 · 395 阅读 · 1 评论 -
要去面试阿里,你至少要掌握如下的索引知识。
什么是索引?索引其实就是一种数据结构,目的就是为了帮助我们快速的检索数据库中的数据。就好比我们查字典的时候,会先翻一番目录,这个目录就是索引。索引具体采用的是哪种数据结构呢?常见的MySQL中主要有两种索引:Hash索引和B+树索引。现在常用的存储引擎是InnoDB,它默认就是B+树。你先说一说什么是Hash索引吧哈希索引底层是哈希表,哈希表是一以key-value结构存储的,...原创 2020-05-02 02:32:13 · 475 阅读 · 1 评论 -
MySQL的“order by”是如何对200G文件进行排序的?
前言学习编程语言的时候,我们第一个行代码往往是“Hello World”。我们学会的第一个真正意义上的算法,我想就是冒泡排序吧。我们创建一个数组,通过N次比较,每次找出最大或最小的元素,把它放到队列最末尾就完成将无序数组转化成为了有序数组,这些排序都是再内存中进行的。我们开发系统的时候,经常会有按照某种条件就行排序的需求。你有没有这样的疑问:我们的数据都是存放硬盘上的,如果数据有200G,...原创 2020-04-27 01:37:14 · 498 阅读 · 0 评论 -
MySQL复制原理
前言学过事务的同学都知道,只要事务commit之后,无论发生什么异常最终都会被持久化到数据库中。但是这样并不能完全保证数据安全,万一数据库机房着火了,硬盘坏了,那么我们数据还是丢了。所以说,将所有的数据都放在一台机器是很危险的,几乎所有的互联网公司都会为数据库设置至少一个备库。这也是今天我们要谈的MySQL复制原理。复制概述复制基本解决的问题是让一台主数据库服务器的数据同步到多台备库上...原创 2020-04-21 21:07:46 · 557 阅读 · 0 评论 -
我就执行一个count(*)为什么这么慢?
前言今天想看一下我的活动有多少用户参与了,随手执行了一条语句select count(*) from table;我等待几秒钟才出现结果,我不禁陷入了对社会和人生的大思考。是我太菜吗?不这条语句简单到无法优化,以至于少一个符号就可能报错;是MySQL太笨了吗?用一个变量保存一个总数,每次要查的时候直接返回,不就好了吗?上面的是真实的故事背景,我们今天就来聊一聊count(*)底层到到底...原创 2020-04-20 23:43:29 · 1611 阅读 · 2 评论 -
MySQL究竟是如何做到持久性的?
前言我们学习事务中,对于持久性(durability)是这样定义的:事务一旦提交,则其所有的修改将会保存到数据库当做。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit=1表示每次执行一条sql如果没有显示启动事务语句(begin或start transaction)就会隐试的开启一个事务。所以通常情况下,我们对数据库做的任何修改,只要事务提交都可...原创 2020-04-07 23:03:58 · 8997 阅读 · 4 评论 -
用了这么久的MySQL,你了解MySQL的架构吗?
前言数据库大家都清楚吧,目前市面上主流的数据库分为Oracle、MySQL、SQLServer。SQLServer微软家开发的,我想.Net开发用的多,我们大学数据库课程所使用的数据库,安装很头疼当时还重装了系统,考完试第一件事就是把它卸载了,所以不是那么熟。Oracle作为排名第一的数据库,很遗憾我也只是学过,并没有再实际开发中用过这玩意,所在的公司都是清一色的MySQL。所以我对MySQL...原创 2020-04-05 22:05:05 · 267 阅读 · 0 评论 -
细说数据库隔离级别
如果事务都是以串行的方式进行的,数据库系统处理完一个事务包,然后再处理下一个事务包,并按照事务开启的时间依次进行。这种方式并不存在事务并行化的竞争,只要保证每个事务的原子性,那么一致性自然就获得了保证。这种方式看起来特别美好,但是结果我们肯定也知道的。这种方式处理会大大降低数据库系统处理事务的能力。当出现一个非常耗时的事务,那么后续事务将会发生挤压,从而导致数据库并发性能很低。可串行...原创 2020-02-16 14:11:53 · 1272 阅读 · 2 评论 -
数据库三范式理解
一范式就是属性不可分割。属性是什么?就是表中的字段,不可分割的意思就按字面理解就是最小单位,不能再分成更小单位了。这个字段只能是一个值,不能被拆分成多个字段,否则的话,它就是可分割的,就不符合一范式。不过能不能分割并没有绝对的答案,看需求,也就是看你的设计目标而定。举例:学生信息组成学生信息表,有姓名、年龄、性别、学号等信息组成。姓名不可拆分吧?所以可以作为该表的一个字段。但我要说这个...原创 2019-03-11 18:56:49 · 845 阅读 · 0 评论 -
数据库事务的四大特性(ACID)以及事务的隔离级别
什么是数据库的事务?事务其实就是单个数据逻辑单元组成的对象操作集合,而数据库的终极目标就是使数据库从一个一致的状态转换到另一个一致的状态,这就是ACID中的一致性(Consistency),而原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)是为了实现这个目标的手段。一个事务是一连串的操作组成,增删改查的集合。就好比java方法一样,java...原创 2017-09-27 10:50:08 · 18760 阅读 · 8 评论 -
谈谈乐观锁和悲观锁
什么是乐观什么是悲观有一类人开车小心翼翼,从不超速、违章、酒驾,他总是很悲观,总担心会发生车祸,所以偶尔会发生车祸。另一类人麻痹大意,超速、酒驾各种胡来,他总是很悲观,总感觉我反正就这一次,我不可能运气这么差吧? 然而结果是什么呢?悲观的司机小心使得万年船,虽然我开的慢,可能上班会迟到,但是我小心驶得万年船,我总能平安无事。乐观的司机总感觉坏事不会发生到自己头上,飙车的时候虽然很爽,但是...原创 2019-02-21 21:44:33 · 1085 阅读 · 0 评论
分享