6.Mysql中的锁

为什么mysql需要锁?

一、解决并发事务问题

一个事务进行读取操作,另一个进行改动操作,我们前面已经说过,这种情况下可能会 发生 脏读不可重复读幻读的问题。
解决这三个问题的有两种 可选的解决方案

1.方案一

读操作MVCC,MVCC只适用于。写操作进行加锁。

普通的 select ,比如
select * from student where id = 1;
如果是 select for update 的话,MVCC是不会被使用的。

事务利用MVCC进行的读取操作,被称为一致性读。或者一致性无锁读,也称之为快照读。
但是往往读取的是历史版本数据,所有普通的 select语句 在 READ COMMITTED、REPEATABLE READ隔离级别下都算是一致性读。

一致性读不会对表中的任何记录做 加锁操作,其他事务可以自由的对表中的记录做改动

很明显,采用MVCC方式的话,读-写操作彼此不冲突,性能更高,采用加锁方式的话,读-写操作彼此都需要排队执行,影响性能。

一般额情况下我们采用MVCC来解决 读- 写操作并发执行的问题,但是在业务的某些情况下,我们必须采用加锁的方式执行。

1.方案二

读、写操作都采用加锁的方式

适用场景:

业务场景不允许读取记录的旧

你可能感兴趣的:(mysql,mysql,数据库,java)