我正在开发与数据库交互的.NET应用程序。在一个方法中,我开始一个SQL事务并修改table1
中的一些值,在完成更改(但仍未提交事务)后,我启动Threading.Thread
以使用table1
中的数据更新table2
中的值。在事务运行时访问数据库中的更改
此线程会读取修改后的值吗?或者它会像交易开始之前那样加载数据?
我正在开发与数据库交互的.NET应用程序。在一个方法中,我开始一个SQL事务并修改table1
中的一些值,在完成更改(但仍未提交事务)后,我启动Threading.Thread
以使用table1
中的数据更新table2
中的值。在事务运行时访问数据库中的更改
此线程会读取修改后的值吗?或者它会像交易开始之前那样加载数据?
这取决于第二个线程是否使用与事务启动相同的连接/会话。如果是,那么它可以看到在该交易期间迄今为止所做的更改。如果它是一个不同的连接,那么这些更改将视而不见,直到他们承诺。
使用RepeatableRead
或ReadUncommitted
第二个线程中事务的事务隔离级别允许您从table1中读取未提交的数据。在事务隔离级别
更多信息:
Set Transaction Isolation Level (Transact-SQL)
不同的是,你将如何确保数据正在读取和更新表2之前写入表1的问题,但是这取决于在你的.NET应用程序实现上。