数据库基础
- 什么是是数据库事务?
- 数据库事务是一种机制,一个操序列,使数据从一种一致性状态转化为另一种一致性状态,事务要么完成要么撤销,没有其他的执行状态;
- 事务将一组数据库操作指令像数据库提交或者撤销,如果其中有一条指令操作失败,那么整租命令就会操作失败,此时会返回数据库执行之前的状态或者上一个节点
- 数据库事务的实现方式是锁机制;
- 说一说有哪些事务状态?
- 活跃状态:任何一个正在执行的事务都处于这个状态
- 部分提交状态:完成事务的上一次操作之后,操作的结果将保存在主内存的缓冲区。
- 失败状态:当事务中的操作发生失败,那么事务进入失败状态,无法进行下一步执行。
- 终止状态:当事务发生失败之后,数据库将回滚到事务开始之前的状态,任务回滚完成,事务进入终止状态
- 提交状态:当事务被完全执行并且没有发生异常或者错误,在内存中的结果会被提交到数据库中,从此事务不能被回滚。
- 事务的特性是什么?
- 原子性:一个事务要么被完全执行,要么不被执行,事务是最小的执行单位;
- 一致性: 一个事务完成之后,其他事务对其操作的的数据的访问结果是一致的;
- 隔离性:在并发访问数据库时,用户的事务是互不干扰的,事务之间不会干涉内部访问的数据;
- 持久性:当一个事务被提交之后,事务对数据库数据的改变是持久的,数据库发生故障也不会有影响。
- 数据库使用什么来实现事务的特性?
- DBMS使用日志来实现数据库的原子性、一致性和持久性,日志记录了事务对数据库的更新操作,如果事务发生错误,那么就会根据日志中的记录,撤销事务对数据库的更新,使得数据库退回到事务执行之前的状态
- DBMS使用锁机制实现事务的隔离性,当多个事务需要对同一个数据进行修改的时候,只有持有数据锁的事务才能进行修改,其他的事务只能等待获取了锁之后再对数据进行访问和修改。
- 事务之间有什么影响?
- 脏读:一个事务读取了另一个事务没有提交的数据;
- 不可重复读:在一个事务范围内,发起了两次查询操作,但是得到的结果不一样,这是因为期间有事务对数据进行了修改操作;
- 幻读:发生于事务不是独立执行时,比如一个事务执行修改表中的所有行,而另一个事务向表中插入了数据,此时修改表的事务就会发现还有行数据没有修改,就像出现了幻觉;
- 丢失更新:两个事务对同一个数据进行跟新操作,当事务A执行了修改之后,事务B覆盖了A的修改,此时事务A就是丢失了更新。
- 什么是事务的隔离级别?
- 为了避免事务之间相互影响,数据库可以设置事务的隔离级别
- 读取未提交:是最低级别的事务隔离界别,不能防止任何事务之间影响产生的问题
- 读取已提交:可以避免脏读
- 可重复读:在同一个事务中对一个数据的访问结果是一致的,无论这个数据是否被其他事务操作
- 可串行化:可以解决所有事务之间影响产生的问题
- 为了避免事务之间相互影响,数据库可以设置事务的隔离级别
回顾:
- 数据库中的触发器的使用场景有哪些?
- 哈希索引和B树索引,哪一个不能进行范围查询和模糊查询,为什么?
- 使用前缀索引的前提是什么?
- 在创建多列索引时,根据业务需求需要将什么放在最左边?
- 创建索引时,有什么注意事项?
- 非聚簇索引分为哪两类?分别是什么意思?
- 什么是数据库事务?
- 数据库事务的完整性和并发性是使用什么机制实现的?
个人学习记录,望各位大佬指正和补充~