1 事物的四大特性ACID,分别是什么意思?
原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
是使用 undo log 来实现的,如果事务执行过程中出错或者用户执行了rollback,系统通过 undo log 日志返回事务开始的状态。
一致性: 指在事务开始之前和事务结束以后,数据不会被破坏,假如 A 账户给 B
账户转 10 块钱,不管成功与否,A 和B 的总金额是不变的。
一致性:通过回滚、恢复,以及并发情况下的隔离性,从而实现一致性。
隔离性: 多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。简言之,就是事务之间是进水不犯河水的。
隔离性:通过锁以及 MVCC,使事务相互隔离开。
持久性: 表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
持久性:使用 redo log 来实现,只要 redo log 日志持久化了,当系统崩溃,即可
通过redo log 把数据恢复。
2 数据库的主从复制原理
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格式修改为row。row格式的binlog日志,记录的不是SQL原文,而是两个event:Table_map 和 Delete_rows
mixed格式其实就是row和statement格式混合使用,当MySQL判断可能数据不一致时,就用row格式,否则使用就用statement格式。
3 什么是索引?索引的优缺点?为什么可以加快查询速度?
1 什么是索引:
索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。
给数据库表中字段加索引:可以提高搜索和排序的速度
2 索引的优缺点:
优点:
唯一索引可以保证数据库表中每一行的数据的唯一性
索引可以加快数据查询速度,减少查询时间
缺点:
创建索引和维护索引要耗费时间
索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的
物理空间
以表中的数据进行增、删、改的时候,索引也要动态的维护。
3 索引为什么可以加快查询速度?
4 索引有哪几种类型?
主键索引: 数据列不允许重复,不允许为 NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL 值,一个表允许多个列创建唯一索引。
普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL 值。
全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
覆盖索引:查询列要被所建的索引覆盖,不必读取数据行
组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并
5 索引的实现原理:B+
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的基础架构图
数据库的三个范式
数据库的存储过程
数据库的约束