为什么mysql需要锁?
一、解决并发事务问题
一个事务进行读取操作,另一个进行改动操作,我们前面已经说过,这种情况下可能会 发生 脏读
、不可重复读
、幻读
的问题。
解决这三个问题的有两种 可选的解决方案
1.方案一
读操作MVCC,MVCC只适用于。写操作进行加锁。
普通的 select ,比如
select * from student where id = 1;
如果是 select for update 的话,MVCC是不会被使用的。
事务利用MVCC进行的读取操作,被称为一致性读。或者一致性无锁读,也称之为快照读。
但是往往读取的是历史版本数据,所有普通的 select语句 在 READ COMMITTED、REPEATABLE READ隔离级别下都算是一致性读。
一致性读不会对表中的任何记录做 加锁操作,其他事务可以自由的对表中的记录做改动
很明显,采用MVCC方式的话,读-写操作彼此不冲突,性能更高,采用加锁方式的话,读-写操作彼此都需要排队执行,影响性能。