【发布时间】: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