Mysql中SQL那些事儿-2

原创
2018/12/27 13:12
阅读数 6

最近进行了面试,关于数据库必问的问题就是,数据库的事务隔离性。根据自己的一些理解,做一下记录。

1、数据库的事务隔离级别有四中:

reade uncommit 事务A读取到了事务B中未提交的数据,如果事务B回滚了事务,就会导致事务A读取的数据是不存在的,就称为脏读。
reade commit 为了避免事务A读取到事务B未提交的数据,将事务隔离级别提高到只能读取事务提交的数据,就会解决上面的问题,但会带来新的问题就是,事务A中查询了数据,此时事务B对数据进行了修改并且进行了提交,这个时候事务A中再进行数据查询,就会发现读取到数据与第一次读取的不一样的,就称为不可重复读,就是同一个事务中两次读取的结果可能不一样。

repeatable read

为了解决上面的问题,将数据库事务隔离级别进一步提高,在这个事务隔离级别中(也是mysql默认的数据隔离级别),当事务A读取了数据,此时事务B对数据进行修改(修改、删除、插入)并提交,这个时候事务A再进行数据查询,数据结果依然与第一次查询结果一样,就称为可重复读,就是在同一个事务中,多次查询的结果一致。

注:mysql使用的数据多版本管理机制,对于事务A多次的读取,能够获取同一个数据。但如果事务B中其中部分数据进行了修改和提交,这个时候事务A在进行的修改是有感知的,但查询是没感知的。只有事务A对部分数据进行修改后,查询才会有感知。

如果一个事务A对数据进行了修改,但没有提交。这个时候事务B在尝试对相同的数据进行修改,就会出现阻塞,直至超时报错。

Serializable 串行话读取,事务进行串行处理。因为不存在并行操作,上面所有问题都不存在了。缺点是性能比较低,因为串行了。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部