Java 删除行和删除表锁oracle

Java 删除行和删除表锁oracle,java,oracle,oracle11g,oracle-sqldeveloper,Java,Oracle,Oracle11g,Oracle Sqldeveloper,我有两个问题 1.从x中删除 2.从x中删除,其中y='a' oracle 11 g为上述查询提供了什么类型的锁 假设我们在程序中迭代下面的查询 从x中删除,其中y='$a' 让我们有一个数字1,2,3,4的列表。。 现在,如果从2服务器调用相同的程序,1服务器将删除1,3。。。其他服务器将删除2,4…?没有问题。您可以删除不存在的记录。但千万不要忘记提交事务。1)因为没有where子句,所以该用户会话的表中的所有行都将被锁定。2) 只有与where子句匹配的行才会被锁定。Oracle通过在该行

我有两个问题

1.
从x中删除

2.
从x中删除,其中y='a'

oracle 11 g为上述查询提供了什么类型的锁

假设我们在程序中迭代下面的查询

从x中删除,其中y='$a'

让我们有一个数字1,2,3,4的列表。。
现在,如果从2服务器调用相同的程序,1服务器将删除1,3。。。其他服务器将删除2,4…?

没有问题。您可以删除不存在的记录。但千万不要忘记提交事务。

1)因为没有where子句,所以该用户会话的表中的所有行都将被锁定。2) 只有与where子句匹配的行才会被锁定。Oracle通过在该行的数据块中设置一个锁定位来使用行级锁定

除非并直到发出提交,否则其他会话都不会看到这些删除。Oracle将使用为每个单独的delete(或任何DML操作)语句创建的回滚信息为任何其他会话提供读取一致性视图。意思:其他会话将看到没有删除的表。一旦这些行被锁定,其他会话将被阻止对这些行发出删除,用户将被阻止,等待提交或回滚这些行。您可以使用两个sqlplus会话来测试这一点

如果您想更多地了解锁,请参阅Tom Kyte的优秀著作《Oracle DB体系结构专家》


是的,两个不同的会话可以删除不同的行集。Oracle默认情况下不执行完全表锁定(它在DML期间锁定表,以防止在更改挂起时对该表进行结构更改),因此一个会话不会阻止另一个会话。

两个查询是否在不同的事务中?两个查询不同的事务