【问题标题】:Deleted records are selectable in the same transaction in SQL Server在 SQL Server 的同一事务中可选择删除的记录
【发布时间】:2020-11-10 19:01:48
【问题描述】:

我正在使用mssql-jdbc JDBC 驱动程序在单个事务中执行以下操作。

执行了以下语句:

delete from table1

表中大约有 10 条记录被删除(执行更新返回 10 条)。然后,在删除之后立即执行以下 select 语句:

select count(*) from table1

结果集说还有10条记录。

在 Oracle 和 Postgres 等其他数据库中,我们得到 0,这是我所期望的。

我不希望 autocommit=true 行为。另外,这两条语句需要在同一个事务中执行。

我可以做些什么来获得我想要的行为吗?

【问题讨论】:

  • 马克,感谢您的编辑。
  • Cannot reproduce。仔细检查您对运行方式的假设。我很难想出任何可能适用的安排,除了在READ UNCOMMITTED 下的事务之外执行COUNT(*)
  • 我正在使用 Spring Transaction。所以,我不是手动创建事务边界。两条语句都以相同的方法执行。事务隔离级别为 ISOLATION_DEFAULT(对于 SQL Server 为 READ_COMMITTED)。
  • 正如小提琴所示,产生这些结果的不是引擎(至少不是直接产生),而是引擎被挠痒痒。我建议您使用您使用的技术标记您的问题 other 而不是 SQL Server 并提供一些代码,以便专家可以权衡。如果您想知道您的客户端/驱动程序在做什么引擎盖,您可以使用 SQL Server Profiler 来跟踪语句。
  • 谢谢...我会试试的。

标签: sql-server transactions sql-delete


【解决方案1】:

回答我的问题。

我们为表添加的 on-delete 级联触发器存在错误。

因此,当删除该表中的记录时,没有发生提交。由于触发器中的失败没有引发 JDBC 异常,因此问题在 Java 端并不明显。

没有其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2012-12-11
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2019-06-05
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多