数据库面试必备

一.事物

1.事物是并发控制的基本单位。所谓的事物,是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事物是数据库维护数据一致性的基本单位,在每个事物结束时,都能保持数据一致性。

2.事物的四个特性(ACID)

原子性(Atomicity):事物中的所有元素作为一个整体提交和回滚,事物是一个完整操作

一致性(Consistemcy):事物的执行使得数据库从一种正确的状态转换成另一种正确的状态。也就是说一个事物执行之前和执行之后都必须处于一致性状态。

(例如A和B转账,假设用户A和用户B两者的钱加起来是5000,那么不管A和B之间如何转账,转账几次,事物结束后两个用户的钱加起来还是5000)

隔离性(Isolation):在事物正确提交之前,不允许把该事物对数据的更改提供给任何其他事物。

持久性(Durability):事物正确提交后,其结果将永久保存在数据库中,即使在事物提交后有了其他故障,事物的处理结果也会得到保存。

3.一个数据库事物通常包含了一个序列对数据库的读/写操作。包含有下面两个目的:

为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致的方法。

当多个应用程序并发访问数据库时,可以在这些应用程序提供一个隔离方法,以防止彼此的操作相互干扰。

4.事物的隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事物的隔离级别

InnoDB存储引擎提供事物的隔离级别

READ UNCOMMITTED

READ COMMITTED

REPEATABLE READ

SERIALIZABLE

这些隔离级别的区别如下:

脏读:一个事物读到另一个事物未提交的数据

例如:A向B转账,A执行了转账语句,但A还没有提交事物,B读取数据,发现自己账户钱变多了(A回滚事物,当B再查看时并没有变多)

不可重复读:(在同一事物中,两次读取同一数据,得到的内容不同)一个事物读取到另外一个事物已经提交的数据,即一个事物看到其他事物所做的修改。

(A查询数据库得到的数据,B去修改数据库的数据,导致A多次查询数据库的结果不一致)

幻读:是指一个事物内读取到别一个事物插入的数据,导致前后读取不一致。

二.索引

在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构;索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引就是提升查找速度的一种手段。

索引的原理:对要查询的字段建立索引就是把该字段按照一定的方式排序;建立的索引只对该字段有用,如果查询的字段改变,那么索引也就无效了,比如图书馆的书是按照书名第一个字母排序的,那么你想要找作者叫张三的就不能使用索引了;还有就是索引太多会降低查询的速度;

DB在执行一条SQL语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜素结果集合。如果我们对某一字段增加索引,在查询的时候就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

不加索引的情况:

1.如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了;

2.对非唯一的字段,例如“性别”这种大量重复值的字段,

3.对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引需要存储空间

索引的优点

1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;

2.可以大大加快数据的检索速度;

3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义;

4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间;

5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

索引的缺点

1.创建和维护索引需要耗费时间,这种时间随着数据量的增加而增加

2.索引需要占物理空间,除了数据表占数据空间外,每一个索引还要占一定的物理空间,如果要占用聚簇索引,那么需要的空间会更大。

3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,因此降低了数据的维护速度。

三.数据库的乐观锁和悲观锁

1.乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反了数据的完整性;(在修改数据的时候把事物先锁起来,通过version的方式来锁定;实现方式:使用version版本或时间戳)

2.悲观锁:先取锁再访问,假定会发生并发冲突,屏蔽掉一切可能违反数据完整性的操作;(在查询完数据的时候把事物先锁起来,直到提交事物;实现方式使用数据库中的锁机制)

数据库的完整性:指数据库中数据在逻辑上的一致性、正确性 、有效性和相容性;

你可能感兴趣的:(MySql的使用)