事务处理
事务ACID特性
事务的隔离级别
事务的基本概念:
事务:一个事务是有一个或者多个SQL语句组成的一个不可分割的单元。只有事务中的所有操作都正常完成,那么整个事务会提交给数据库。如果有部分数据处理失败,那么整个事务就会回退到最初的状态。因此:事务要么成功,要么失败。
通俗解释:事务就是要完成某项任务时的sql语句,而且具有原子操作,为什么会有原子操作?因为衡量一个事务的整体,只有sql语句完全执行成功,才会说明成功,如果中间出现错误就会从头再来,就是常说的“回滚”,再任务完成后,就会提交给磁盘。出现错误我们为了不从头再来,可以将执行成功的语句设置保存点,以便后面存在错误直接返回到最近的保存点即可。
事务特点:
1、事务是一组SQL语句的执行,要来全部成功,要么全部失败,不能出现部分成功。
保证事务执行的原子操作。
2、事务的所有SQL全部执行完成,才能提交(commit)事务,把结果写入磁盘。
3、在SQL执行的过程中,有SQL出现错误了,那么事务要回滚(rollback)到初始状态。
update a: 5 ->8
设置保存点 SavePoint f1;
select
update a : 8 ->7
注意:设置保存点的作用是再sql执行过程中出现错误可以回滚到保存点处,而不同回滚到最初状态。提高数据库操作效率。
事务的ACID特性:
每一个事务必须满足下面4个特性:
事务的原子性(Atomic):
事务是一个不可分割的整体,事务必须具有原子特性
事务的一致性(Consistency):
一个事务执行之前和执行之后,数据库数据必须保持一致性状态。
数据库的一致性状态需要用户来负责,由并发控制机制实现。
eg:网上购物来说,将商品加入购物车,商品的库存介绍、到商品加入购物车是一个完整性的事物。
由于并发操作带来的数据不一致性问题包括数据脏读,不可重复读,幻读。
事务的隔离性(Isolation):
当两个或者多个事务并发操作时,为了保证数据的安全性,将一个事务的内部操作和其他事务隔离起来,不被其他正在执行的事务所看到。
假如事务t1和事务t2并发操作时,对t1而言,要么是在t2执行完成之后执行,那么是可以看到t2执行的结果。
要是在t2之前执行完成,那么t2能够看到t1执行的结果。
事务的持久性(Durability):
事务完成之后,数据库中的数据永久性的保存下来,即使数据库出现故障,也能回复数据
事务的特性:原子性针对事务整体说的,一致性:避免并发操作导致数据前后不一致的问题,如何避免数据不一致,加锁操作,对于innodb类型的表行级加锁;隔离性:多个事务同时执行独立执行,相互不影响,如何做到事务之间相互不影响????