我们都是在使用mysql,但是我们对于mysql的了解,只是停留在在如何使用上,对于mysql的理解和学习我们还要进行更加深刻的学习,今天我们就来看下mysql的隔离级别.
我们mysql的隔离级别可以分为4种,其实就是
1.读未提交 : 读未提交,就是说我们的一个事务可以读取别的事务还没有提交的结果,比如:
A客户端执行一个读取事务
B客户端此时执行了一个插入事务,但是还没有提交,B客户端回滚事务
A客户端读取的结果中,就有B客户端还没有提交的内容
这个就是读未提交,也就是产生了脏读,我们读取的数据其实不是我们期望的数据,
测试:
查看当前的mysql的事务隔离级别:mysql> select @@tx_isolation;
设置事务的隔离级别:SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
2.读已提交:读已提交就说我们可以读取已经提交的事务.这个事务的隔离级别是大多数的数据库的默认的隔离界别,但是不是Mysql的隔离级别, 但是这个数据库的隔离级别还是有一个问题就是产生不可重复读,什么是不可重复读呢:
A客户端开启一个事务,查询数据
B客户端开启一个事务插入数据,并提交
A客户端在这个事务中继续查询数据,就可以看家B客户端提交的数据了
这个就是读已提交,就是说我们是可以在一个事务中看见别的事务提交的数据
3.可重读:可重读就是我们的一个事务在没有提交之前,每一次读取的数据是一样的.但是可重读可能产生幻读,
A客户端查询一个表
B事务修改了这个表,并且提交事务
A客户端在本事务中查询的时候还是之前的数据,没有变,
但是可能产生幻读:
A客户端查询这个表中的数据
B客户端插入可一条记录
A客户端查询的时候可能就查询的记录多了一条 ,像是产生幻觉一样
我们怎么一看感觉幻读了不可重复读一样啊,其实两者还是有差异的,不可重复读偏重的是修改数据,幻读偏重的是增加和删除数据
我们的Mysql,采用版本控制来消除幻读....
4.可串行化:可串行话就是通过加锁的机制来避免幻读,就是在每个数据上加上共享锁,当一个事务没有提交之前,别的数据必须等待,但是这个有一个很很大的问题就是容易产生死锁!!!
Mysql的默认隔离级别是:可重读读
参考链接:点击打开链接
点击打开链接