软件开发面试之数据库事务篇
不少的小伙伴正在准备或是即将准备后端开发的岗位,对于这个岗位而言数据库是必问的一个知识点,而数据库的事务和数据库的隔离级别又是问到数据库时必问的重点。小编从年初开始也是不断的再学习找工作的知识,在面过软件开发岗的几次面试中,数据库是每次基础面的必问知识,接下来的这篇文章我来给大家细说一下数据库事务的那些事。
文章目录:1. 数据库事务是什么? 1.1 事务的定义 1.2 事务的特点 1.2.1 原子性 1.2.2 一致性 1.2.3 隔离性 1.2.4 持久性 1.3 事务的状态2. 数据库隔离级别 2.1 Read Uncommitted 2.1.1 脏读 2.2 Read Commit 2.2.1 不可重复读 2.3 Repeatable Read 2.3.1 幻读 2.4 Serializable3. 总结
1. 数据库事务是什么?
所谓事务,就是要完成一件事情,在这个事情中包含了多个任务。
当所有的任务都执行成功,这个事情就是成功的:所有改动的数据生效。
当任意一个任务执行失败,这个事情就是失败的:所有改动的数据回退。
1.1 事务的定义
事务是数据库中一个单独的执行单元。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再更改,否则事物取消或回滚。数据库事务是为了保证在数据库更改失败的情况下还可以回到执行事务之前的状态。
SQL标准规定当一个SQL语句被执行,就隐含地开始了一个事务,事务最后被提交或回滚之后事务就结束,如果一个事务没有完成commit,其影响都可以被回滚,在断点和系统崩溃的情况下,回滚会在事务重启后执行。
每一个SQL语句默认为自成事务,且一旦执行完就提交。如果一个事务需要执行多条SQL语句,就必须关闭默认的每一个SQL语句自动提交。如果关闭自动提交也依赖于具体的SQL实现。也可以使用BEGIN或START TRANSACTION,显示地开启一个事务;
1.2 事务的特点
对于数据库事务,必须满足以下四种性质,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。即ACID四种属性。