数据库事务(个人理解)
- 事务的定义 数据库事务:指的是对数据库进行读写的一系列操作序列 系统中的事务:处理一系列业务处理的执行逻辑单元,该单元里的一系列类操作要不全部成功要不全部失败
- 事务的四大特性 原子性:一次事务要么全部成功,要么全部失败。失败就会rollback 一致性:一系列操作后,所有的操作和更新全部提交成功,数据库只包含全部成功后的数据就是数据的一致性 事务处理完成后维持和事务处理前状态一致(银行转账:A 100元,B 100元。A给B转100,处理前两人账户总金额200元,处理后两人账户总金额200元) 隔离性:事务的隔离级别,事务互相隔离互不干扰 持久性:保存在数据库中的数据应该长久保存,即是数据库宕机也可以重新恢复数据
- 事务的隔离级别 读未提交(read uncomitted) 在事务进行读的时候允许其它事务进行读和写。写的时候不允许其它事务写,但允许读,可能会造成脏读(看到的是对方未提交的事务) 读已提交(read committed) 在事务进行读的时候允许其它事务进行读和写,写的时候禁止读和写。可能会造成不可重复读(多次读之后,看到的结果不一样) 可以重复读(repeatable read,也是MySQL数据库默认的事务隔离级别) 在事务进行读的时候,允许其它事务进行读但不允许写。事务进行写的时候禁止其它事务进行读和写。可能会造成幻读(数量发生改变) 序列化 串行化的一个操作,事务只能一个接一个执行。隔离级别最高,执行效率低 可重复读和幻读的区别:可重复读是单个数据的变化,幻读是数据库整体的一个变化(可能是数量) 幻读和不可重复读都是在同一个事务中多次读取了其他事务已经提交的事务的数据导致每次读取的数据不一致,所不同的是不可重复读读取的是同一条数据,而幻读针对的是一批数据整体的统计(比如数据的个数)