mysql的事务隔离级别

在面试的过程中经常会被问到数据库的事务隔离级别,但是这次不一样,,,负责的系统死锁了,,WC。。。

言归正传,首先我们为什么需要事务隔离级别,事务的隔离级别是干嘛?对我们来说有什么作用呢?
在这里插入图片描述
了解了事务的隔离级别的作用,那么在mysql里面有几种事务的隔离级别呢?每一种事务的隔离级别起到什么作用呢?
在这里插入图片描述在这里插入图片描述
基础知识总结完了,但是还是很懵逼,因为RR有幻读 Seriallizable效率低,那么我们该怎么选择事务的隔离级别呢?

其实隐约的我们可以知道其实如果并发不那么高的,安全要求很高的情况下我们一般都使用Serializable的事务隔离级别。

但是如果并发高呢?我们一般使用RR 事务给力级别。这个事务的隔离级别会有幻读的现象,我们怎么去阻止幻读的现象的产生呢?

听说有两种方式可以避免,
1 、对RR事务隔离级别的select加for update操作。
2、mysql mvcc机制已经解决了该问题。

出来混迟早是要还滴,这次不得不研究一下mvcc机制。

什么是MVCC?

英文全称为Multi-Version concurrency Control 翻译为中文即 多版本并发控制。
其实就是一种乐观锁。。。

原理 在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号为(可能为空,其实还有一列称为回滚指针,用于事务回滚)。这里的版本号并不是实际的时间值,而是系统版本号。每次开始新事物,系统版本号都会自动递增,事务开始时刻的版本号作为事务的版本号,用来和查询每行记录的版本号进行比较。

疑问,事务开始的时候 应查询过事务里面的所有的sql 语句了?但是在事务开始的时候很多sql都还没有拼接呢。。
这是因为事务里面有子事务?原子事务在开始的时候回查询数据?和版本号? 这个需要找个资料确定一下。

串行化由于是会对所涉及到的表加锁,并非行锁,自然也就不存在行的版本控制问题
运来serializeable是表锁。。。不死锁才怪。。
有个疑问 行锁和表锁可以同时存在吗?行锁存在滞后毕表锁还可以锁吗?再就是同一个事务的锁是可以重入的吗?比如说我再select 后面加一个for update 那么我在后面对表进行update的时候还可以拿到表锁吗?

参考地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值