【mysql数据库全部重点知识】
二十三——二十五天
mysql数据库
一、数据库底层实现原理
1.你对数据库的了解,用了什么么存储引擎区别是什么 .
1、InnoDB和MyISAM是MySQL中的比较常用两个存储引擎,MyISAM适用于查询为主的应用,InnoDB适合频繁修改及涉及到安全性较高的应用。
2、InnoDB支持事务,MyISAM不支持。
3、InnoDB是聚集索引,MyISAM是非聚集索引。InnoDB中索引和数据在一起,MyISAM采用了一种索引和数据分离存储方式。
4、InnoDB最小的粒度锁是行锁,MyISAM是表锁。
5、InnoDB不保存行数,MyISAM保存。
2.关系型数据库和非关系型数据库的区别?
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户管理并且能保证ACID。
非关系型数据库的存储方式是基于键值来存储的,对于值的类型也有不同的支持,所以没有固定的要求和限制不能保证ACID。
3.一级索引(聚簇索引)和二级索引(非聚簇索引)
一级索引B+树叶子节点直接存储完整行数据,查到数据时会直接返回。 innoDB只有一个聚簇索引。
二级索引叶子节点存储的是主键值而非行数据,它会根据主键去一级索引查找数据并返回数据,这步骤称作回表。一个表可以有多个二级索引。
4.什么是回表? 怎么减少回表?
回表发生在使用用二级索引查找数据时,二级索引叶子节点存储的是主键值而非行数据,它会根据主键去一级索引查找数据并返回数据,这步骤称作回表。
通过索引覆盖和索引下推减少回表。
1、索引覆盖:指的是一个查询语句的执行只用从索引中获取,不必从数据库表中读取。
2、索引下推:默认开启。(zipcode, lastname, address)构成一个索引
SELECT FROM people WHERE zipcode="95" AND lastname LIKE '%etnunia%' AND address LIKE '%Main Street%'
没有索引下推则MySQL会通过zipcode从存储引擎中查询对应数据,返回到MySQL服务端,然后MySQL服务端基于后半部分查数据。如果使用索引下推,会返回索引数据,然后根据后半部分依次判断。
5.一条sql语句执行过程?
1、使用连接器,通过客户端/服务端通信协议与MySQL建立连接,并查询是否有权限
2、MySQL 8.0之前检查是否开启缓存,开启了Query Cache且命中完全相同的SQL语句,则直接将查询结果返回给客户端
3、由解析器进行语法分析和语义分析,并生成解析树,预处理器则会根据MySQL规则进一步检查解析树是否合法,比如要查的表或列是否存在
4、由优化器生成执行计划,根据索引看看是否可以优化
5、执行器来执行SQL语句,这里具体的执行操作由MySQL的存储引擎来执行SQL语句,根据存储引擎得到结果,若开启Query Cache,则缓存,否则直接返回
二、SQL语言怎么使用
3.SQL语言的分类?
序号 | 分类 | 解析 |
---|---|---|
1 | DDL(Data Definition Language) | 数据定义语言,用来定义数据库对象(数据库、表、列) |
2 | DML(Data Manipulation Language) | 数据操作语言,用于操作数据库记录(数据) |
3 | TCL (Transaction Control Language) | 事务控制语言,用于保证数据的完整性约束。(commit,rollback) |
4 | DCL(Data Control Language) | 数据控制语言,用于定义访问权限和安全级别 |
5 | DQL(Data Query Language) | 数据查询语言,用于查询记录(数据) |
3.1DDL
-
对象: 指的就是库,表,列。
-
结构:库的创建,删除,修改,更名 以及, 表创建,表删除,表修改(列名修改,添加新列,删除新列)
-
对应的关键字:create、alter、drop 其后都跟着对象的关键字,比如 database、table
-
数据类型
类型名 解释 占磁盘空间 有符号支持的范围 无符号支持的范围 TINYINT 微型整数类型 1字节大小 -128 ~ 127
0 ~ 255
SMALLINT 小型整数类型 2字节大小 -32768 ~ 32767
0 ~ 65535
MEDIUMINT 中型整数类型 3字节大小 -8388608 ~ 8388607
0 ~ 16777215
INT、INTEGER 常规整数类型 4字节大小 -2147483648 ~ 2147483647
0 ~ 4294967295
BIGINT 大型整数类型 8字节大小 -2^63^ ~ 2^63^-1
0 ~ 2^64^-1
小数类型:
-
FLOAT:浮点数数据类型;FLOAT(n):如果
0 <= n <= 24
占用4 bytes
,如果25 <= b <= 53
占用8 bytes
;FLOAT:不指定位数个数则可占用4 bytes
;FLOAT(M,N):M表示总位数,N表示小数位数。 -
DOUBLE:双精度小数类型;占用
8 bytes
;DOUBLE(M,N):M表示总位数,N表示小数位数; -
DECIMAL(M,D), NUMERIC(M,D):小数数据类型;占用
0 ~ 8 bytes
;DECIMAL(M,N):M表示总位数,N表示小数位数。
BIT类型:
-
BIT(M):存储BIT值的数据类型,M的取值范围是
1 ~ 64
;占用(M+7)/8 bytes
。
日期和时间类型
-
DATE:存储日期,格式为:
yyyy-mm-dd
;MySQL 5.6.4版本之前占用3 bytes
,MySQl 5.6.4版本之后占用3 bytes
。 -
TIME:存储时间,格式为:
HH:MM:SS
;MySQL 5.6.4版本之前占用3 by