oracle 上的 select SQL 语句是否锁定已使用的 table 以供其他连接更新?

Does a select SQL Statement on oracle lock the used table for update by other connections?

oracle 上的 select SQL 语句是否锁定已使用的 table 以供其他连接更新?这取决于我是否在 jta 事务中执行 select 吗?如何控制此问题并防止只读 SQL 语句锁定 table 以进行编辑?

这取决于很多因素 - 例如您的 transaction isolation 设置。即使在自动提交模式下,如果您的数据库上的事务相当短,您也会有 some

所以是的,SELECT可以创建其他人必须等待的锁。

如果您想防止这种情况大规模发生并且知道您在做什么,事务隔离"read uncommitted" 将创建最少的锁(并提供最少的保护)

我知道这是一个老问题,但我认为它值得一个更好的答案。如果您引用 Automatic Locks in DML Operations,您会发现唯一会锁定表的 SELECT 语句是带有 FOR UPDATE[=16= 的语句] 子句,并且由于“没有 FOR UPDATE 子句的查询不会获取任何数据锁来阻止其他操作,因此此类查询通常称为非阻塞查询”。