作用:为了解决并发访问时产生的问题
内存和数据库
未提交读(Read Uncommitted):
并发是最大的,容易造成脏读
小红有200元
小红爸有600元
小红爸给小红打1000元,当小红爸给小红打钱,小红卡变成1200元,小红爸还没去扣减,小红查自己卡,发现是1200元,这数据就是脏读,因为小红的爸打钱这事务还没有完成,当扣减小红爸钱发现不够,回滚事务。
解决方案:如果第一个事务提交前,其他事务不可读取其修改过的值
提交读(Read Committed):oracle
读事务不影响写事务
小红有200元
小红查询银行卡有200元,这时小红爸刷了这张卡50元买烟,小红查了明细返回继续看钱,变成了150元,她还在处于这个事务中,却读出了2个值
解决方案:锁住已经查询出来的记录,不让其它事务写操作
可重复读(Repeated Read):mysql
小红有200元
小李有1000元
小红和小李的数据都在这张表里面,当读小红的200元时,有人操作小李的数据(将其删除),而产生幻读
解决方案:锁住这张表
序列化(Serializable):
性能极低,一般不用(一个数据库这张表就为你一个服务了)