我有两个查询
1。public class Program
{
static IConfigurationRoot Config = null;
public static void Main(string[] args)
{
Config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
}
}
2。public class TestClass
{
public void DoSomething()
{
// Now I need to use that instantiated Config object here.
}
}
oracle 11g为上述查询提供了什么类型的锁?
假设我们在程序中迭代以下查询
delete from x;
让我们有1,2,3,4号的清单.. 现在如果从2服务器调用相同的程序将1服务器删除1,3 ...而其他服务器将删除2,4 ...?
答案 0 :(得分:1)
1)由于没有where子句,所有行都将锁定在该用户会话的表中。 2)只有那些与where子句匹配的行才会被锁定。 Oracle通过在该行的数据块中设置锁定位来使用行级锁定。
除非发出提交,否则其他会话都不会看到这些删除。 Oracle将使用回滚信息 - 为每个单独的删除(或任何DML操作)语句创建,以向任何其他会话提供读取一致的视图。含义:其他会话将看到表没有删除。一旦行被锁定 - 将阻止其他会话针对这些行发出删除,并且将阻止用户,等待提交或回滚这些行。您可以使用两个sqlplus会话进行测试。
如果您想了解有关锁的更多信息,请查看Tom Kyte的优秀书籍Expert Oracle DB Architecture。
是的,两个不同的会话可以删除不同的行。默认情况下,Oracle不会执行全表锁定(它会在DML期间锁定表以防止在更改挂起时对该表进行结构更改),因此一个会话不会阻止另一个会话。
答案 1 :(得分:-1)
没问题。您可以删除不存在的记录。但你不能忘记提交交易。