您的位置:首页 > 数据库

数据库 面试积累

2020-07-24 20:38 113 查看

一、事务

1.什么是事务?

  • 事务包含一个或多个业务操作,这些操作要么都执行,要么都不执行。事务常被用来确保数据的一致性。

2.事务的四大特性ACID

  • 原子性(Atomicity): 事务中所有操作是不可再分割的原子单元。事务中所有操作要么都执行成功,要么都执行失败。
  • 一致性(Consistency): 事务执行后,数据库状态与其他业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账户余额之和应该保持不变。
  • 隔离性(Isolation): 隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
  • 持久性(Durability): 一旦事务提交成功,事务中所有的数据操作都必须被持久化保存到数据库中,即使提交事务后,数据库崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

CSDN博主总结:

  1. 原子性(事务不可分割);
  2. 一致性(事务前后数据一致);
  3. 隔离性(多个事务之间,保持数据的隔离);
  4. 持久性(保证事务在提交后,数据库必须对数据进行操作而产生永久性影响);

参考文章:blog

3.不考虑隔离性会产生的3个问题

  • 脏读:一个事务读到另一个事务未提交的数据,造成数据错误。
    引例:转账问题:A向B转100,,第一次读B,读到100。只要原来的事务不提交,B就会回滚至0,这就是脏读。
  • 不可重复读:在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
  • 幻读:在一个事务里面的操作中发现了未被操作的数据。A事务中读取到了B事务中已提交的新插入的数据,发现还有没有修改的数据。就像产生幻觉一样。
  • 补充 不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
  • 幻读和不可重复读都是读取了另一条已经提交的事务,所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

参考文章:blog
4.解决产生问题的方法:四种隔离级别

  • 读未提交:事务未提交的数据可以读。

    并行问题严重严重。什么都不能防。
  • 读已提交:读取已经提交了的数据。

      可以防脏读,不能防不可重复读和幻读。
  • 可重复读:读一个数据时,上锁。期间不让其他事务做删除修改操作。

      可以防脏读、不可重复读,不能防幻读。
  • 串行化:直到一个事务的所有子事务全部结束才可以执行下一个事务。

      同步。什么都能防。
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: