事务经典案例:
张三要给李四转账,这里涉及到两个操作,从张三的账户上减去500块钱,给李四的账户上增加500块钱。这两个操作要么同时成功,要么同时失败,如何确保它们同时成功或失败?答案就是事务。
事务具有四个特性:
1. 原子性(Atomicity)
一个事务中的所有操作,要么全部完成,要么全部都不完成,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从没执行过一样。即,事务不可分割、不可约简。
2. 一致性(Consistency)
在事务开始之前和事务结束以后,数据库的完整性没有被破坏,这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。
3. 隔离性(Isolation)
数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时优于交叉执行而导致数据的不一致。
事务隔离级别:
a.未提交读(Read Uncommitted)
b.提交读(Read Committed)
c.可重复读(Repeatable Read)
d.串行化(Serializable)
可能导致问题:
脏读:A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。
不可重复读:事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,也就是数据不重复了,系统不可以读取到重复的数据,成为不可重复读。
幻读:事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。
4. 持久性(Durability)
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
参考文章链接:https://blog.csdn.net/weixin_42440637/article/details/113530994