1、什么是事务
1、定义
数据库事务是访问并可能更新数据库中各种数据项一个程序执行单元
2、组成
一个数据库事务通常包含对数据库进行读或写的一个操作序列。
3、目的
- 为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
- 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
2、 事务目标分析
1、事务目的总结:
事务的目的就是要提供3种方法:
1)、失败恢复方法
2)、保持一致性的方法
3)、操作隔离的方法
2、成功情况下
能将数据从一种状态变为另一种状态,并能够持久化。
3、异常情况下
- 能将数据恢复到正常状态
- 要能保证一致性,包含数据的一致性和约束的一致性
4、并发情况下
并发的操作之间不能产生相互影响
3、事务特性
1)原子性
事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
2)一致性
事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
3)隔离性
多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
4)持久性
一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
4、事务并发异常
1、回滚丢失/第一类更新丢失
此种更新丢失是因为回滚的原因,所以也叫回滚丢失
2、覆盖丢失/第二类更新丢失
此种更新丢失是因为更新被其他事务给覆盖了,也可以叫覆盖丢失。
3、 脏读
此种异常时因为一个事务读取了另一个事务修改了但是未提交的数据。
4、不可重复读
这种异常是一个事务对同一行数据执行了两次或更多次查询,但是却得到了不同的结果。
5、幻读
幻读和不可重复读有点像,只是针对的不是数据的值而是数据的数量。
5、事务隔离级别
1、读未提交
该隔离级别指即使一个事务的更新语句没有提交,但是别的事务可以读到这个改变。
2、读已提交
该隔离级别指一个事务只能看到其他事务的已经提交的更新,看不到未提交的更新,消除了脏读和第一类丢失更新,这是大多数数据库的默认隔离级别,如Oracle,Sqlserver
3、可重复读
该隔离级别指一个事务中进行两次或多次同样的对于数据内容的查询,得到的结果是一样的,但不保证对于数据条数的查询是一样的,只要存在读改行数据就禁止写,消除了不可重复读和第二类更新丢失,这是MySql数据库的默认隔离级别。
4、串行化
事务执行的时候不允许别的事务并发执行,完全串行化的读,只要存在读就禁止写,但可以同时读,消除了幻读。这是事务隔离的最高级别,虽然最安全最省心,但是效率太低,一般不会用。
操作指令