关系型数据库管理系统(MySQL)面试大纲个人学习回顾总结

关系型数据库管理系统(MySQL)面试大纲个人学习回顾总结

(持续更新)

1.1、SQL(structured query language):

结构化查询语言

1.2、SQL语句主要分为哪几类

数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER,主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。
数据查询语言DQL(Data Query Language)SELECT
数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
数据控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK

2、MySQL:

一种关系型数据库管理系统,oracle旗下产品

3、数据库的三大范式:

第一范式:每一列都不可再拆分;
第二范式:在第一范式的基础上,非主键列完全依赖于主键列,而不是依赖于主键列的一部分;
第三范式:在第二范式的基础上,非主键列只能依赖于主键列,不能依赖于其他非主键列。

4、MySQL权限表:

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库里,由mysql-install-db脚本初始化,分为以下几种:
(1)user权限表:存放用户账户信息以及全局级别(所有数据库)权限;
(2)db权限表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库;
(host权限表用来配合db权限表对给定主机上的数据库级的操作权限作更细致的控制)
(3)table-priv权限表:存放数据表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表;
(4)columns-priv权限表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据表的这个字段。
权限验证过程从上而下,若上一级权限为y,则不再往下验证。

5.1、MySQL的binlog(二进制日志):

binlog用来记录所有数据库表的结构变更以及表数据修改,主要用来复制与恢复
使用场景:
(1)主从复制:MySQL服务器master端开启binlog,把它的binlog传递给slaves端,达到主从数据一致的目的。
(2)数据恢复:能用mysqlbinlog工具恢复数据
三种录入格式:
(1)statement:基于sql语句的复制。每一条会修改(不包含查询)数据的sql语句都会被记录在binlog中。特点:只记录sql语句和sql语句上下文相关信息,不需要记录每一行数据的变化,日志量小,但是对于使用函数之类的语句无法记录复制;
(2)row:基于行的复制。不记录sql语句的上下文相关信息,仅记录哪条记录被修改。日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,日志量大;
(3)mixed:混合模式复制。statement与row的结合,是一种折中方案,普通操作使用statement记录,无法使用statement则用row。

5.2、MySQL的复制原理以及流程:

主从复制:将主数据库的DDL操作和DML操作通过binlog传输到从数据库上,然后从数据库重新执行一次,使主从数据库保持一致。

工作原理:一、在主库上把更新事件记录到binlog;二、从库将主库的binlog复制到自己的中继日志;三、从库读取中继日志的事件,将其重放到从数据库中。

主从复制的作用

(1)主数据库出现问题,可以切换到从数据库;
(2)可以进行数据库层面的读写分离;
(3)可以在数据库上进行日常备份。

6、MySQL中的数据类型:

(1)整数类型:TINYINT(1字节)、SMALLINT(2字节)、MEDIUMINT(3字节)、INT(4字节)、BIGINT(8字节)、FLOAT(4字节)、DOUBLE(8字节)、DECIMAL
(2)字符串类型:CHAR(0-255字节)、VARCHAR(0-65535字节)、TEXT(0-65535字节)
(3)日期和时间类型:DATE(3字节)、TIME(3字节)、YEAR(1字节)、DATETIME

6.1、varchar和char的区别:

char表示定长字符串,长度固定,存取速度快,最多能存放的字符个数为255;
varchar表示变长字符串,长度可变,存取慢,但不占据多余的空间,最多能存放的字符个数为65532。

6.2、int(20)和varchar(20)里的数字表示什么?

int(20)里的20指的是显示字符的长度,但仍占据4个字节的内存空间;
varchar(20)里的20指的是最多存放20个字符。

6.3、float和double的区别:

float类型数据可以存储至多8位十进制数,在内存中占4字节;
double类型数据可以存储至多18位十进制数,在内存中占8字节。

7、MySQL常用的的2种存储引擎:

(1)Myisam:是Mysql的默认存储引擎,提供非事务安全表。当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。
(2)InnoDB:InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全表。但是对比 Myisam 的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

8、InnoDB引擎的4大特性:

插入缓冲、二次写、自适应哈希索引、预读

9、什么是索引:

索引是一种对数据库表中一列或多列的值进行排序的一种存储结构,相当于图书的目录

10、索引的优缺点:

优点:一般来说可以大大加快数据的检索速度
缺点:创建和维护索引要耗费时间和物理空间

11、索引的分类:

(1)物理存储角度:
聚集索引:把数据文件和索引文件放到一块,找到索引也就找到了数据
非聚类索引:把数据文件和索引文件分开存储
(2)逻辑角度:
主键索引、唯一索引、普通索引、全文索引
(3)数据结构角度:
B树索引、哈希索引

12、Myisam 索引和InnoDB索引的区别:

Myisam 索引是非聚类索引,索引的叶子结点存储的是数据地址,需要再寻址一次才能得到数据;InnoDB索引是聚类索引,主键索引的叶子结点存储着数据,因此主键索引非常高效。

13、使用索引查询一定能提高查询的性能吗?

通常来说索引查询数据比遍历整张表查询要快。但是索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。

14、非聚类索引一定会回表查询吗?

不一定,当查询语句所要求的字段全部命中了索引就不需要回表查询。

15、什么是事务?

事务是一个不可分割的数据库操作序列,用来维护数据库的完整性,保证成批的操作要么完全执行,要么完全不执行。

16、事务4个特性:

(1)原子性:事务是最小的执行单位,要么全部执行,要么全部不执行
(2)一致性:事务执行前后,多个事务对同一个数据读取的结果保持一致性
(3)隔离性:并发访问数据库时,一个用户的事务不被其它事务干扰
(4)持久性:一个事务完成后,它对数据库中数据的改变是持久的,即使数据库发生故障也不会影响。

17、什么是脏读、不可重复读、幻读?

(1)脏读:读到别的事务回滚前的脏数据
(2)不可重复读:在一个事务的两次查询中数据不一致,这可能是两次查询过程之间数据被其他事务修改了
(3)幻读:在一个事务的两次查询中数据条数不一致。

18、事务的隔离级别:

(1)READ_UNCOMMITTED(读取未提交): 事务最低的隔离级别,允许读取并发事务尚未提交的数据变更,但是会出现脏读、不可重复读、幻读
(2)READ_COMMITTED(读取已提交): 允许读取并发事务已经提交的数据变更,解决脏读,但会出现不可重复读、幻读
(3)REPEATABLE_READ(可重复读): 保证一个事务相同条件下前后两次获取的数据是一致的 (注意是 一个事务,可以理解为事务间的数据互不影响)解决脏读、不可重复读、但会出幻读
(4)SERIALIZABLE(可串行化):事务串行执行(逐个执行),事务之间完全不可能产生干扰,解决了脏读、不可重复读、幻读。但效率很差,所以实际中一般不用

19、锁:

当数据库有并发事务的时候,可能会产生数据的不一致,锁机制就是用来保证访问次序的

20、MySQL上锁的分类:

(1)共享锁:读锁,用户对数据进行读取时对数据加上共享锁。共享锁可以同时加上多个
(2)排他锁:写锁,用户对数据进行写入时对数据加上排他锁。排他锁只可以加一个

21、死锁以及解决方法:

死锁是指多个事务在同一资源上相互占用,并请求锁定对方的资源,导致恶性循环的现象。
解决方法:
(1)如果不同的程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会;
(2)在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
(3)对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率。

22、乐观锁和悲观锁以及它们是如何实现的:

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性,在修改数据的时候把事务锁起来。适用于写比较少的情况,即冲突真的很少发生的时候。
实现方式:使用版本号机制或者CAS算法实现
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。再查询完数据的时候把事务锁起来,直到提交事务。适用于写比较多的情况。
实现方式:使用数据库中的锁机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值