面试:数据库相关

1 事物的四大特性ACID,分别是什么意思?

原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

是使用 undo log 来实现的,如果事务执行过程中出错或者用户执行了rollback,系统通过 undo log 日志返回事务开始的状态。

一致性: 指在事务开始之前和事务结束以后,数据不会被破坏,假如 A 账户给 B

账户转 10 块钱,不管成功与否,A 和B 的总金额是不变的。

一致性:通过回滚、恢复,以及并发情况下的隔离性,从而实现一致性。

隔离性: 多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。简言之,就是事务之间是进水不犯河水的。

隔离性:通过锁以及 MVCC,使事务相互隔离开。

持久性: 表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。

持久性:使用 redo log 来实现,只要 redo log 日志持久化了,当系统崩溃,即可

通过redo log 把数据恢复。

2 数据库的主从复制原理

Refer to https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg%3D%3D&mid=2247497982&idx=1&sn=bb589329cceb5462fc41f66ec63dbf56&chksm=cf2227d7f855aec16dd4d3b3425c0401850eeaf2c9cdc82e82722d38a00c24ee9ccfa3353774&token=1712314640&lang=zh_CN&rd

1 什么是数据库的主从复制?

一台服务器作为主数据库服务器,另外一台或多台作为从数据库服务器。

数据主库对外提供读写操作,数据从库提供读操作。主数据库中的数据自动复制到从数据库服务器。

2 主从复制的原理:

1 主数据库中有个二进制文件bin log,记录了所有的增删查改(bin log线程)

2 从数据库把主数据库的bin log文件中的sql复制到自己的relay log(I/O线程)

3 从数据库执行relay log中的SQL语句(SQL执行线程)

上图主从复制过程分了五个步骤进行:

1 主库的更新SQL(update、insert、delete)被写到binlog

2 从库发起连接,连接到主库。

3 此时主库创建一个binlog dump thread,把bin log的内容发送到从库。

4 从库启动之后,创建一个I/O线程,读取主库传过来的bin log内容并写入到relay log

5 从库还会创建一个SQL线程,从relay log里面读取内容,从ExecMasterLog_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

3 binlog的三种格式:statement语句,row行,mixed混合式

如果是statement格式,binlog记录的是SQL的原文,如果主库和从库选的索引不一致,可能会导致主库不一致。

为解决这个问题,可以把binlog格式修改为rowrow格式的binlog日志,记录的不是SQL原文,而是两个event:Table_map 和 Delete_rows

mixed格式其实就是rowstatement格式混合使用,当MySQL判断可能数据不一致时,就用row格式,否则使用就用statement格式。

3 什么是索引?索引的优缺点?为什么可以加快查询速度?

1 什么是索引:

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。

给数据库表中字段加索引:可以提高搜索和排序的速度

2 索引的优缺点:

优点:

  • 唯一索引可以保证数据库表中每一行的数据的唯一性

  • 索引可以加快数据查询速度,减少查询时间

缺点:

  • 创建索引和维护索引要耗费时间

  • 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的

物理空间

  • 以表中的数据进行增、删、改的时候,索引也要动态的维护。

3 索引为什么可以加快查询速度?

4 索引有哪几种类型?

  • 主键索引: 数据列不允许重复,不允许为 NULL,一个表只能有一个主键。

  • 唯一索引: 数据列不允许重复,允许为NULL 值,一个表允许多个列创建唯一索引。

  • 普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL 值。

  • 全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。

  • 覆盖索引:查询列要被所建的索引覆盖,不必读取数据行

  • 组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并

5 索引的实现原理:B+

https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg%3D%3D&mid=2247487988&idx=1&sn=eccbb31faa4f580ae71fbea5cd4ff01b&source=41&wechat_redirect

4 什么是内连接?什么是外连接?

  • Inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集

  • left join = left outer join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

  • right join = right outer join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

5 什么是视图?视图和sql有什么区别?

视图本身是一个不含任何数据的虚拟表,数据库中存放视图的定义(保存好的SELECT语句

实体表中保存实际数据,使用实体表创建视图后,实体表中的数据发生变化,视图查询出的数据就会发生变化。

从视图中读取数据时,视图会在内部执行对应的SELECT语句,并创建出一张临时表。

为什么使用视图?

简化用户操作:将频繁使用的查询语句保存成视图,这样就不用每次都重新写。在创建好视图后,可以将视图和其他实体表一样,在SELECT语句中进行调用。

6 删除一张表中的数据,怎么让关联表中数据也删除呢?

7 mySql:死锁?悲观锁和乐观锁

8 索引的原理:B+树

9 事物隔离

数据库的线程池

MySQL的基础架构图

数据库的三个范式

数据库的存储过程

数据库的约束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值