mysql学习笔记

    科技2022-08-13  99

    1.数据库语句的执行顺序

    (1) from:对左表left-table和右表right-table执行笛卡尔积(a*b),形成虚拟表VT1(2) on: 对虚拟表VT1进行on条件进行筛选,只有符合条件的记录才会插入到虚拟表VT2中(3) join: 指定out join会将未匹配行添加到VT2产生VT3,若有多张表,则会重复(1)~(3)(4) where: 对VT3进行条件过滤,形成VT4, where条件是从左向右执行的(5) group by: 对VT4进行分组操作得到VT5(6) cube | rollup: 对VT5进行cube | rollup操作得到VT6(7) having: 对VT6进行过滤得到VT7(8) select: 执行选择操作得到VT8(9) distinct: 对VT8进行去重,得到VT9(10) order by: 对VT9进行排序,得到VT10(11) limit: 对记录进行截取,得到VT11返回给

    2.数据库的索引

    索引按照算法主要分为B+树索引和Hash索引,B+树索引的实现内部是一颗B+树,hash索引则是

    3.数据库行转列和列转行

    行转列:

    行转列主要是用groupBy将其分组然后用聚合函数进行处理

    SELECT user_name , MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学, MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文, MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语 FROM test_tb_grade GROUP BY USER_NAME;

    列转行:

    列转行主要是利用union来将每次查询出的列数据集合起来

    select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2 union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2 union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2 order by user_name,COURSE;

    4.sql  语句种类

    DDL: 数据定义语言 create alter drop 等DML: 数据操作语言 insert update detele DQL: 数据查询语言 select DCL: 数据控制语言 grant TCL: 事务控制语言 commit rollbck

    5.事务的隔离级别

    读未提交: 可以读到还没有提交的数据读已提交: 读到的数据是已经提交了的数据可重复读: 同一个事务下读到的数据是一致的串行化:事务串行执行

    6.事务的实现方式

    mysql innodb的事务中的隔离性是由锁来保证的,持久性则是由redo日志来保证的

    7.mysql的锁

    mysql的锁主要分为lock和latch,其中latch主要是保证并发资源的操作的正确性,lock则是对数据库对象的锁定,如锁表,页和行,lock仅在事务的commit或者rollback后才会释放,锁主要分为IS,IX,S,X这四种。IS为意向共享锁,IX为意向排他锁,S为共享锁,X为排他锁。

     ISIXSXIS兼容兼容兼容不兼容IX兼容兼容不兼容不兼容S兼容不兼容兼容不兼容X不兼容不兼容不兼容不兼容

    8.undo日志和redo日志

    undo日志和redo日志都是innodb存储引擎的日志。

    undo日志存储在数据库内部的一个undo segment中,其存储的页也是通过B+树来进行管理的,undo日志是逻辑日志,存储的是对一条记录进行回滚操作的数据,这个日志还可以对数据库隔离级别进行实现。

    redo日志主要是用来保证数据的持久性,它存储的是物理的日志,表示的是对数据文件的页的物理的修改,它是顺序的写入日志。数据库重启后则会根据redo日志来对commit的事务进行恢复。

    9.B+树

    特点为:

    每个结点至多有m个子女除根结点外,每个结点至少有[m/2]个子女,根结点至少有两个子女有k个子女的结点必有k个关键字

    10.怎么从辅助索引找到对应的数据

    首先通过辅助索引找对应的主键值,然后通过主键从聚集索引中找到对应的数据

    11.innodb和myisam的比较

     innodbmyisam文件由.frm文件,undo日志,redo日志,表空间文件(.ibd文件)由索引文件(.MYI),数据文件(.MYD),表定义文件(.frm)构成索引结构

    分为聚集索引和辅助索引,其中聚集索引按照主键顺序存储的索引,并且其数据就存储在这个索引的叶子节点中,其辅助索引存储的叶子节点存储的是主键

    索引和数据是分开存储的,主键索引和非主键索引的数据结构没有太大区别,它们的叶子节点都是指向对应的数据位置锁支持行级锁表级锁事务支持事务不支持事务全文索引不支持全文索引支持全文索引

    12.innodb的MVCC机制

    对于innodb存储引擎其对每一条记录都会由两个隐藏列,一个为DATA_TRX_ID,表示修改这条记录的事务id,一个为DATA_ROLL_PTR,指向其对应的回滚段的位置,回滚段中update类型的回滚记录也会有这两个字段,从而对一条记录有多个版本的回滚链,从而在不同隔离级别则可以通过读取不同版本的数据来完成,对于read uncommited则直接读取最新版本的数据的数据即可,对于read commited则读最新的是提交了的版本的即可,而对于repeatable read .则读其第一read的版本即可。

     

    13.事务的4大特性

    Atomicity: 原子性指一个事务的操作要么都成功,要么都不成功Consistency:  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态Isolation: 隔离性指的是两个事务互不干扰

    Durability:持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

    14. main函数做的事情

    合并插入缓冲刷新脏页删除无用undo页日志缓冲刷新到磁盘

    15. B树和B+树的区别

    在B树中,你可以将键和值存放在内部节点和叶子节点;但在B+树中,内部节点都是键,没有值,叶子节点同时存放键和值。

    B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。

    16. binlog的日志及其类型

    binlog记录的是数据库执行更改的所有操作,主要用作主从复制的操作。

    statement 每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。row 不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如alter table),因此这种模式的文件保存的信息太多,日志量太大。mixed 普通操作使用statement记录,当无法使用statement的时候使用row。

    17. innodb特性

    插入缓冲:B+树结构,存储的是对辅助索引的修改,可以将多次更改操作合并为一次两次写: 将一页数据刷新到磁盘先将数据写到doublewrite buffer对应的区中,然后再离散地写到对应磁盘位置,保证写页数据地唯一性。自适应哈希索引:对同种访问模式热点页建立哈希索引异步IO:可以合并刷新操作刷新邻接页:刷新脏页时将相邻的脏页也刷新到磁盘
    Processed: 0.009, SQL: 8