银行等支付系统中使用的数据库有几种隔离级别隔离级别是什么

事务的隔离性比想象的要复杂茬 SQL 标准中定义了四种级别的隔离级别。通常而言较低级别的隔离通常可以执行更高的并发,系统的开销也更低

该级别为未提交读在该級别中,事务中的修改即使没有提交对其他事务也都是可见的。事务可以读取未提交的数据这也被称为脏读。这个级别会导致很多的問题从性能上来说,它不会比其他级别好太多但缺乏其他级别的很多好处。除非真的有非常必要的理由在实际应用中一般很少使用。

该级别为提交读大部分数据库有几种隔离级别系统的默认隔离级别都是它,但 MySQL 不是该级别满足隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改换而言之,一个事务从开始直到提交之前所做的任何修改对其他事务都是不可见的。这个級别有时候也叫做不可重复读因为两次执行同样的查询,可能会得到不一样的结果

该级别为可重复读,它是 MySQL 默认的事务隔离级别它解决了脏读的问题,保证了在同一个事务中多次读取同样记录的结果是一致的

但是理论上,该级别却无法解决另外一个问题:幻读所謂幻读,指的是当某个事务在读取某个范围内的记录时另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记錄时会产生幻行

幻读示例: 第一个事务对一个表中的数据进行了修改比如这种修改涉及到表中的“全部数据行”。同时第二个 事務也修改这个表中的数据,这种修改是向表中插入“一行新数据”那么,以后就会发生操作第一个 事务的用户发现表中还有没有修改的數据行就好象发生了幻觉一样.

InnoDB存储引擎通过多版本并发控制解决了幻读的问题。

该级别为可串行化是最高的隔离级别。它通过强制事務串行执行避免了前面说的幻读问题。简而言之该级别会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用问题

实際应用中也很少使用这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下才考虑采用该级别。

授予每个自然月内发布4篇或4篇以仩原创或翻译IT博文的用户不积跬步无以至千里,不积小流无以成江海程序人生的精彩需要坚持不懈地积累!

//计算日期从当年1月1日算起的天数
//計算两个日期之间相差的天数
//将15位身份证转换为18位
 //将id转换成18位本来就是18位不需要操作
 //最后一位为前17位之和个位上的数字,用X代替0
 
 
 
 

我要回帖

更多关于 数据库有几种隔离级别 的文章

 

随机推荐