
MySQL
文章平均质量分 70
lhj_loveFang_1105
稳住不慌
展开
-
MySQL为什么推荐自增主键ID为主键及MySQL的调优
页的概念在计算机里,无论是内存还是磁盘,操作系统都是按页的大小进行读取的(页大小通常为 4 kb),磁盘每次读取都会预读,会提前将连续的数据读入内存中,这样就避免了多次 IO,这就是计算机中有名的局部性原理,即我用到一块数据,很大可能这块数据附近的数据也会被用到,干脆一起加载,省得多次 IO 拖慢速度, 这个连续数据有多大呢,必须是操作系统页大小的整数倍。所以MySQL 的页,默认值为 16 KB,也就是说对于 B+ 树的节点,最好设置成页的大小(16 KB),这样一个 B+ 树上的节点就只会有一次 I原创 2021-04-05 15:12:26 · 2039 阅读 · 2 评论 -
MySQL的MVCC和幻读解决策略
MVCCInnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现。这两个列,一个保存了行的创建时间,一个保存行的删除时间,并不是实际的时间,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号作比较,MVCC只在可重读读和提交读两种隔离级别下工作。可重复读下的MVCC的操作方法SELECTInnoDB会根据以下两个条件检查每行记录:1.InnoDB只查询版本早于当前事务版本的数据行(也就是,行的系统版本原创 2021-03-26 12:37:25 · 188 阅读 · 0 评论 -
数据库的事务隔离级别怎么实现的?
事务隔离级别针对四个锁带来的问题:脏读,不可重复读,丢失更新,幻读1.未提交读:四个问题都没有解决。他在读取数据时不会加锁,但是在更新数据时会对其加行级共享锁,事务结束后释放。例: 事务A读取某行记录时,事务B也能对这行记录读取更新,当事务B更新记录时,事务A读取到事务B修改的版本,即使事务B未提交。2.已提交读:解决了脏读问题。解决方法:给写数据加行级排它锁,事务结束释放,给读数据加行级共享锁,读完便会释放。例: 事务A负责读,事务B负责写,A读完数据后释放共享锁,B更新数据,事务还未结束,A再原创 2021-03-24 13:28:44 · 255 阅读 · 0 评论 -
MySQL技术内幕之InnoDB存储引擎思维导图
原创 2021-03-08 15:00:45 · 306 阅读 · 0 评论 -
InnoDB存储引擎的备份与性能调优
备份分类可以根据不同的类型来划分备份的方法。根据备份的方法不同可以将备份分为:Hot Backup(热备)Hot Backup是指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响。这种方式在MySQL官方手册中称为Online Backup(在线备份)。Cold Backup(冷备)Cold Backup是指备份操作是在数据库停止的情况下,这种备份最为简单,–般只需要复制相关的数据库物理文件即可。这种方式在MySQL官方手册中称为Offine Backup(离线备份)。原创 2021-02-02 16:19:01 · 223 阅读 · 1 评论 -
InnoDB存储引擎下的事务
概述数据库系统引入事务的主要目的:事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以确保要么所有修改都已经保存了,要么所有修改都不保存。认识事务事务可由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成。事务是访问并更新数据库中各种数据项的一个程序执行单元。在事务中的操作,要么都做修改,要么都不做,这就是事务的目的,也是事务模型区别与文件系统的重要特征之一。对于InnoDB存储引擎而言,其默认的事务隔离级别为READREPEATABLE,InnoDB存储引擎中的原创 2021-02-01 23:29:50 · 306 阅读 · 0 评论 -
MySQL中的锁
概述开发多用户、数据库驱动的应用时,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据。为此就有了锁(locking)的机制,同时这也是数据库系统区别于文件系统的一个关键特性。lock和latchlatch一般称为闩(shuan)锁(轻量级的锁),因为其要求锁定的时间必须非常短。若持续的时间长,则应用的性能会非常差。在 InnoDB存储引擎中,latch又可以分为mutex(互斥量〉和rwlock(读写锁)。其目的是用来保证并发线程操作临原创 2021-01-30 19:51:09 · 146 阅读 · 0 评论 -
MySQL数据库三大范式
什么是数据库范式:简言之,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。建立科学的、规范的数据库需要满足一些规范,以优化数据存储方式,在关系型数据库中这些规范称之为范式。第一范式每一列属性都是不可再分的属性值,确保每一列的原子性。第一范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成;每个字段的值都只能是单一值。1971年埃德加·科德提出了第一范式。即表中所有字段都是不可再分的。第二范式前提:满足第一范式每一行的数据只能与其中一列相关,即一行数据只做原创 2021-01-30 18:05:04 · 232 阅读 · 0 评论 -
MySQL中的索引
索引的概述MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下图所示:一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。建立索引是数据库中用来提高性能的最常用的方式。索引优劣势建立了索引优点自然是提高了查找数据的效率,节省了时间,但缺点就是,首先也是原创 2021-01-29 13:53:15 · 130 阅读 · 0 评论 -
InnoDB存储引擎表
索引组织表在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键。如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。当表中有多个非空唯一索引时,InnoD原创 2021-01-26 21:00:07 · 272 阅读 · 0 评论 -
MySQL数据库的各种类型文件
文件分类参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。socket文件:当用UNIX域套接字方式进行连接时需要的文件。pid文件:MySQL实例的进程ID文件。MySQL表结构文件:用来存放MySQL表结构定义文件。存储引擎文件:因为MySQL表存储引擎的关系,每个存原创 2021-01-23 20:49:27 · 1189 阅读 · 0 评论 -
InnoDB 存储引擎
概述从MySQL 5.5版本开始是默认的表存储引擎(之前的版本InnoDB存储引擎仅在Windows下为默认的存储引擎)。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。InnoDB体系架构InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:□ 维护所有进程/线程需要访问的多个内原创 2021-01-21 16:20:36 · 143 阅读 · 1 评论 -
MySQL体系结构和存储引擎
数据库与数据库实例MySQL被设计为一个可移植的数据库,几乎在当前所有的系统上都能运行。并且是一个单进程多线程架构的数据库,MySQL数据库实例在系统上表现就是一个进程。 数据库是文件的集合,是依照某种数据模型组织起来的并存放于二级存储器中的数据集合,数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。MySQL体系结构1.连接池组件2. 管理服务和工具组件3.SQL接口组件4.查询分原创 2021-01-19 20:23:04 · 107 阅读 · 0 评论 -
Java的数据库编程:JDBC
1.数据库编程MySQL是一个CS结构的系统。我们这个数据库编程呢,就是通过自己写代码实现一个MySQL客户端,同样是通过网络和服务器进行交互。客户端不是很容易实现的。数据库会给我们提供一组API(application programming interface),提供一组函数/类/方法,让用户去直接使用,来方便我们实现。不同的数据库提供的API都是差距比较大的,所以为了解决这个问题,Java中引入JDBC,事Java自带的一组数据库操作的API,相当于涵盖了各种数据操作的操作方式,把不同的数据原创 2020-05-31 22:33:35 · 211 阅读 · 0 评论 -
MySQL中的自连接,子查询,合并查询和索引,事务概念
1.自连接a》求所有计算机组成原理比java成绩高的同学id。1>先找到计算机组成原理和java课程的id2>根据id再成绩表中进行筛选2.子查询单行子查询(子查询的结果只有一种)a》查询和“不想毕业”同班的同学有哪些多行查询a》查询语文或者英文对应的成绩1>借助in2>借助exists3.合并查询把多个查询的结果集合合并成一个集合(需保证多个结果集之间的字段类型和数目都得一致)a》查询id<3或者名字为英文的课程1>用o原创 2020-05-30 22:06:25 · 292 阅读 · 0 评论 -
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接
1.group by子句把得到的查询结果集按一定规则进行分组a》查询每个岗位对应平均工资,最高工资,最低工资group by也可以结合一些条件对数据进一步筛选,不是使用where,而是having.b》查找所有平均工资高于250的岗位和平均工资。2.联合查询/多表查询机制:笛卡尔积就是多张表中的每个数据分别进行排列组合之后的结果。多表查询的过程,就是先计算出多个表的笛卡尔积,在针对这个结果基于一些条件去筛选。如果针对两个大表进行查询,笛卡尔积的计算开销会很大,最终查找效率也会变原创 2020-05-29 17:16:27 · 1878 阅读 · 0 评论 -
MySQL中数据库的约束,表的设计和CRUD的一些进阶操作
1.数据库的约束约束:数据库针对数据进行一系列的校验,如果发现数据不符合约束中描述的校验规则,就会插入失败,主要是为了提高数据的正确性。约束类型:1》NOT NULL - 指示某列不能存储 NULL 值。2》 UNIQUE - 保证某列的每行必须有唯一的值。3》 DEFAULT - 规定没有给列赋值时的默认值。4》 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。原创 2020-05-28 17:38:02 · 306 阅读 · 0 评论 -
MySQL中的CRUD操作( Create, Retrieve,Update,Delete)
1. 新增(Create)1》全列插入insert into [表名] values (对应列数据);2》指定列插入insert into [表名] (若干指定列) values (对应列数据)没有被插入的列默认为null3》一次插入多条记录insert into [表名] values (对应列数据) ,(对应列数据)。。。2.查询(Retrieve)1》全列查询select * from [表名];2》指定列查询select [列名] from [表名];3》查询字段为表达原创 2020-05-25 21:49:39 · 1457 阅读 · 2 评论 -
初识MySQL
1.数据库是啥数据库是一个软件,是非常依赖数据结构的,是组织并存储数据的软件,一般是存储再硬盘上,也有再内存中的。2.数据库分类数据库可分为:关系型数据库和非关系型数据库①关系型数据库:数据的组织形式使用“表”,得有个表头,表头约定很多列,插入的数据就是表中的一行,每一行都需要和表头结构对应,并且对数据的约束比较强。(适用于大部分场景)例如:MySQL,Oracle,SQL sever。。。②非关系型数据库:数据组织形式使用“键值对”,需要指定key和value,每组数据的value包含哪些字段原创 2020-05-23 16:16:42 · 242 阅读 · 0 评论