@transactional修饰查询是否会加锁?
在使用@Transactional注解修饰查询时,就其加锁行为而言,需要根据它所应用的隔离级别来判断。
隔离级别对加锁行为的影响
在MySQL中,@Transactional支持的隔离级别主要有以下几种:
- 串行化(SERIALIZABLE):最高隔离级别,会针对所有查询动作进行加锁,保证数据的串行化。
- 可重复读(REPEATABLE READ):保证在事务执行期间,不会读到其他事务已提交但未提交的数据,但可能会存在幻读问题。不会加锁。
- 读已提交(READ COMMITTED):保证只读到其他事务已提交的数据,但可能会出现不可重复读和幻读问题。不会加锁。
- 读未提交(READ UNCOMMITTED):可能会读到其他事务未提交的数据,可能会出现脏读、不可重复读和幻读问题。不会加锁。
因此,如果使用@Transactional修饰的查询中没有增删改动作,在以下隔离级别下会发生加锁行为:
- 串行化:会加锁,保证数据的串行化。
- 其他(可重复读、读已提交、读未提交):不会加锁。










