数据库事务知识
何为事务?
要么整体成功要么整体失败
事务的4个特性
原子性
表示一个事务里的多个数据库操作是不可分割的单元,要么都成功整个事务提交,只要有一个失败那么其他的操作也要一起撤销。
一致性
事务在提交前后数据的总和是不变的,即数据不会被破坏
隔离性
在兵法操作数据时,事务之间应该互相不干扰
持久性
一旦事务提交成功,那么所有的数据都会持久到数据库中
这里,一致性是目标,其他三点是为了达到这个目标所才有的方法或者手段。
事务的4种隔离级别
由低到高分别是:Read uncommitted,Read committed,Repeatble read,Serilizable
而在数据的并发操作中可能会出现:脏读,不可重复度,幻读
脏读(dirty read)
比如:老板给你开资,1万元,但是前一天喝多了手一抖给你转了2万元,你一查看账户可乐坏了,一看我操?涨工资了!
此时老板发现工资不对,马上将金额修改为1万,再提交事务。
这个过程中你看到的是2万(事务并未提交你就看见了),这就叫脏读
不可重复读(unrepeatble read)
比如:A在取款的过程中,B往该账户转了100元,B的转账事务提交后,那么A两次查询的数据就不一样了。(刚开始看的时候还是1000呢,怎么现在变成1100了?)
幻读(phantom read)
A事务读取了B事务新增的数据操作。这里强调的是新增。而不可重复度强调是修改。
比如:银行系统在同一个事务中,两次统计存款数,在两次统计的过程中刚好有一个用户存了一百块钱,这时两次统计的金额就不一样了。如果新增的数据刚好满足事务的查询条件,那么两次产生的结果就像出了幻觉一样。