数据库事务是指单个逻辑单元执行一系列操作,要么完全执行要么完全不执行。
事务有四大特点:原子性,一致性,隔离性,持久性。
原子性是说一个事务是一个整体,要么完全执行,要么完全失败。
一致性说的是如果事务失败那么修改过的数据将回到修改前的状态。
隔离性:查看数据时要么查看修改他之前的状态要么查看修改它之后的状态。
事务有四种隔离级别:1.Read Uncommitted 2.Read committed 3.Repeatable Read 4.Serializable
Read Uncommitted和Read Committed 它的优先级最低,也不安全,比如说你买一本书,在买之前你将数据库的优先级改为 Read Uncommitted,你和书店说好转账然后你在支付的时候停留在支付页面没有提交,但是在商家查看收款信息的时候钱已经到账,你把书拿走了然后退出支付,商家在查账单,哎不对啊,我钱呐,不巧的是商家也懂这个然后他去数据库将优先级更改成了Read Committed 你再次去买书的时候你还想白拿一本然后你没有提交,商家这时也收不到收款信息,你说你付过了,这时商家就会对你说上次那本书你没有给我钱吧,小伙子。。。。。此处省略一个场景。
上述中没有提交能看到信息的成为脏读。这里写代码片下面说说Repeatable Read这种隔离级可重读,就比如说银行每天都会结账假设系统需要统计三次今天的流水,如果结果一致那么就可以结束了。但时,假如再结帐的时候用户突然存了/取出了一笔钱,数据库级别是Read committed那么三次的流水将会是不一致的,将级别改为Repeatable Read那么这种情况将不会出现,但是它也有一个问题就是如果这时有新用户注册并存了一笔钱那三次的流水就会出现不同,这种情况成为幻读,InnoDB和Falcon存储引擎通过多版本并发控制机制解决了该问题。
Serializable:它是最高级别的隔离,它会为事务进行强制排序并给每读的数据行加上共享锁。这也造成了它的效率将是最低的。
数据库事务
最新推荐文章于 2022-03-21 22:04:00 发布