我有一个在事务中执行的读取查询,以便指定隔离级别.一旦查询完成,我该怎么办?

  • 提交事务
  • 回滚事务
  • 不执行任何操作(这将导致事务在使用块结束时回滚)

每种方法的含义是什么?

using (IDbConnection connection = ConnectionFactory.CreateConnection())
{
    using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
    {
        using (IDbCommand command = connection.CreateCommand())
        {
            command.Transaction = transaction;
            command.CommandText = "SELECT * FROM SomeTable";
            using (IDataReader reader = command.ExecuteReader())
            {
                // Read the results
            }
        }

        // To commit, or not to commit?
    }
}

编辑:问题不在于是否应该使用事务,或者是否有其他方法来设置事务级别.问题是,提交或回滚一个不修改任何内容的事务是否有任何区别.有性能差异吗?它会影响其他连接吗?还有其他区别吗?

推荐答案

你promise .时期没有其他明智的选择.如果你启动了一项交易,你应该关闭它.提交将释放您可能拥有的所有锁,并且对于ReadUncommitted或Serializable隔离级别同样合理.依赖隐式回滚(虽然在技术上可能是等效的)只是一种糟糕的形式.

如果这还不能说服你,想象下一个在你的代码中间插入UPDATE语句的人,并且必须跟踪发生的隐式回滚并删除他的数据.

Sql相关问答推荐

在 Presto SQL 的 where 子句中使用 Max()

查询数据如何使用 kusto(Azure 数据资源管理器)KQL 中的偏移量进行分页

使用 SQL Server 将列转换为多行

如何计算 PostgreSQL 中条件的出现次数?

如何分组输出 2 列中的每个值组合? - SQL

在蒸汽流利中查找所有具有空多对多关系的项目

如何从另一个表中获取最后 2 条记录作为列

oracle DB 为什么字符串中有空间比较总是返回false?

将不确定数量的行转换为列?

查询在特定条件下选择限制

根据示例结束日期和季度编号计算季度日期

根据其他记录更新记录

连接三个表并检索预期结果

何时可以在 SQL 表中保存 JSON 或 XML 数据

在 psycopg2 中将表名作为参数传递

无法访问 Big Query 中类型为 ARRAY> 的字段

使用复杂类型查询 Spark SQL DataFrame

PostgreSQL:创建索引以快速区分 NULL 和非 NULL 值

如何在 Oracle Sql developer 中查看解释计划?

如何选择表格中除一列以外的所有列?