首先,为什么需要事务?
最典型的例子是银行转账,因为不是原子性的操作(一个账号扣款,另一个账号收款),所以存在出现问题的可能,如这边扣款完毕,然后程序挂掉,收款方又没收到,这钱就蒸发了。
为了保证流程按照我们预计的执行,所以出现了事务的概念。
事务的特性:ACID。
原子性、一致性、隔离性、持久性。
注意,这是在一个事务操作中表现出来的特性,由技术手段来完成,而不是数据库真的有这些特性。
隔离级别是什么?
理论上,事务之间只要先后有序(一个事务执行完再执行另一个,也叫串行化,Serializable),就不会发生数据问题。
但是,这样显然不合适,因为先后有序会导致事务的阻塞,高并发访问时会导致很长时间没有响应。
为了解决这个问题,又出现了事务的隔离级别的概念。一般有四个级别,见下表。
隔离级别 | 脏读 | 丢失更新 | 不可重复读 | 幻读 |
未提交读:Read Uncommited | 是 | 是 | 是 | 是 |
已提交读:Read commited | 否 | 是 | 是 | 是 |
可重复读:Repeatable Read | 否 | 否 | 否 | 是 |
可串行读:Serializable | 否 | 否 | 否 | 否 |
表来自:http://blog.csdn.net/shuaihj/article/details/14163713
锁又是什么?
锁是底层的控制机制,事务通过锁来控制隔离级别。
锁有很多,大致划分为两类:悲观锁、乐观锁。更多请自行搜索。
实际开发中很少直接操作锁,更多的是利用数据库提供的事务的四个隔离级别。
可以认为隔离级别是锁的一个整体打包解决方案(引用了参考链接中的原话)。
参考:
http://blog.csdn.net/bjyfb/article/details/44022995
原文:http://www.cnblogs.com/larryzeal/p/6278969.html