目录
- 1. 说明
- 2. 常见情况
- 2.1 select ... for update
- 2.2 select ... lock in share mode
- 2.3 update
- 2.4 delete
- 2.5 insert
1. 说明
- 1.在mysql中,当前读(Current Read)是一种读取操作,不仅读取数据,还会对数据加上适当的锁,来保证数据的一致性和事务的隔离性。
- 2.当前读通常涉及到的是读取到的最新数据,并且可能对数据加锁以防止其他事务对数据进行修改。
- 3.当前读操作通常在InnoDB存储引擎中使用,与事务的隔离级别(Isolation Levels)密切相关。
- 4.不同的隔离级别(如READ COMMITTED、REPEATABLE READ、SERIALIZABLE)会对当前读的行为有不同的影响。
- 5.在SERIALIZABLE隔离级别下,所有读取操作都会变成当前读,而不仅仅是那些显式加上锁的读取操作。
- 6.当前读是一种带有锁机制的读取操作,旨在确保读取的数据一致性并防止其他事务对这些数据进行并发修改。
2. 常见情况
2.1 select … for update
- 1.这种查询会对读取的行加上排他锁(Exclusive Lock),以防止其他事务对这些行进行更新或删除操作。
- 2.sql示例:
select * from student where name = '张三' for update;
2.2 select … lock in share mode
- 1.这种查询会对读取的行上加上共享锁(Shared Lock),以防止其他事务对这些行为进行更新或删除操作,但允许其他事务读取这些行。
- 2.sql示例:
select * from student where name = '张三' lock in share mode;
2.3 update
- 1.更新操作会对涉及的数据行加上排他锁,以确保数据一致性。
- 2.sql示例:
update student set name = '李四' where name = '张三';
2.4 delete
- 1.删除操作会对涉及的数据行加上排他锁,以确保数据一致性。
- 2.sql示例:
delete from student where name = '张三';
2.5 insert
- 1.插入操作在某些情况下也可能涉及到当前读,比如通过触发器(Triggers)或其他复杂的插入逻辑,不过一般来说,插入操作更多的是修改表的数据结构而不是读取已有数据。