事务隔离机制我会简单复述,主要总结各个事务隔离机制能解决什么问题和在实际存储过程中该如何选型的问题(这里以mysql数据库为例)
原则
- 执行效率在 Read uncommitted, Read committed,repeatble read,serializable依次递减(Read committed,repeatble read 两个效率差不多)。隔离级别的设置应该保证对系统最小影响下运行。
- 事务隔离级别设置时是以某个事务为基准,设置的目标是其他事务对当前事务的影响状况。这里需要说明的是你需要考虑的是当前事务需要一个什么样的效果,不同隔离级别的效果不一样,怎样保证在第一点保证的情况下完成事务的运行
- 针对系统实现的功能和使用发放设置默认隔离机制,比如我们的系统只有一个用户在操作,就不会涉及并发的问题,完全可以将隔离机制设置为read uncommitted
- 事务在运行过程中,是单独开辟出一块空间来保存当前已经修改的但是没有提交的数据,意思就是当前事务可以查询到当前事务修改但未提交的数据,但是其他的事务不可以(read uncommitted 除外,因为他没有任何同步控制)
机制
说到事务控制,不得不说锁机制,说到锁又不得不说两种读取数据的方式(这里就不普及X锁和S锁以及相对应的意向锁的知识了,大家自行补课)
- 一致性锁定读
这种读取方式特殊表现为select ….for update,读取时会对数据上S锁,这样如果下一个sql是修改语句,意向X锁就会被阻塞导致等待,直到当前事务提交为止。 - 一致性非锁定读
说道这种机制,不得不说innodb的日志控制机制,大家都知道我们事务中的数据在提交之前