码迷,mamicode.com
首页 > 其他好文 > 详细

事务四大隔离级别

时间:2016-05-10 11:12:36      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:事务隔离级别

2.事务四大隔离级别

1如果是两个线程并发修改,一定会互相捣乱,这时必须利用锁机制防止多个线程的并发修改

2如果两个线程并发查询,没有线程安全问题

3如果两个线程一个修改,一个查询......会有3种问题:

     1).脏读:一个事务读取到另一个事务未提交的数据

     2).不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同 --- 行级别的问题(改)

     3).虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致 --- 表级别的问题(增删)


四大隔离级别:

Read uncommitted -- 不防止任何隔离性问题,具有脏读/不可重复度/虚读(幻读)问题

Read committed -- 可以防止脏读问题,但是不能防止不可重复度/虚读(幻读)问题

Repeatable read -- 可以防止脏读/不可重复读问题,但是不能防止虚读(幻读)问题

Serializable -- 数据库被设计为单线程数据库,可以防止上述所有问题

 

从安全性上考虑: Serializable>Repeatable read>read committed>read uncommitted

从效率上考虑: read uncommitted>read committed>Repeatable read>Serializable

 

真正使用数据的时候,根据自己使用数据库的需求,综合分析对安全性和对效率的要求,选择一个隔离级别使数据库运行在这个隔离级别上.

mysql 默认下就是Repeatable read隔离级别

oracle 默认下就是read committed隔离级别

 

查询当前数据库的隔离级别:select @@tx_isolation;

设置隔离级别:set [global/session] transaction isolation level xxxx;其中如果不写默认是session指的是修改当前客户端和数据库交互时的隔离级别,而如果使用golbal,则修改的是数据库的默认隔离级别

 

数据库中的锁机制----共享锁排他锁:

Serializable隔离级别查询不加任何锁,Serializable隔离级别下做的查询共享锁特点:共享锁和共享锁可以共存,但是共享锁和排他锁不能共存

在所有隔离级别下进行增删改的操作都会加排他锁特点:和任意其他锁都不能共存


事务四大隔离级别

标签:事务隔离级别

原文地址:http://8477424.blog.51cto.com/8467424/1771665

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!