我想知道在处理多线程时如何以正确的方式使用TransactionScope类?
我们在主线程中创建了一个新的作用域,然后我们生成了几个工作线程,并且我们希望它们参与主作用域,因此,例如,如果作用域永远不会完成,则会在每个作者上调用回滚.
我在内部使用ThreadStaticAttribute阅读了有关TransactionScope的内容,这使得上述不可能/非常困难 - 有人可以验证这两种方式吗?如果我们以同步方式运行代码,那么回滚就可以工作,即内部事务能够参与主事务,但是如果我们切换到线程执行则不行.
谢谢
假设我有一个由几个单独的SELECT,INSERT,UPDATE和DELETE语句组成的存储过程.没有明确的BEGIN TRANS/COMMIT TRANS/ROLLBACK TRANS逻辑.
SQL Server如何以事务方式处理此存储过程?每个语句都会有隐式连接吗?或者存储过程会有一个事务吗?
另外,我怎么能使用T-SQL和/或SQL Server Management Studio自行找到它?
谢谢!
我想使用php和mysql安全地增加一个字段值.
我必须使用哪种类型的表/字段?
我必须使用最低版本的MySQL吗?
MySQL的这个安全事务的sql代码是什么?
我想在我的应用程序的开头读取文本数据夹具(CSV文件)并将其放入我的数据库中.
为此,我使用初始化方法(@PostConstruct注释)创建了一个PopulationService.
我也希望它们在一个事务中执行,因此我在同一个方法上添加了@Transactional.
但是,似乎忽略了@Transactional:在我的低级DAO方法中启动/停止事务.
我需要手动管理交易吗?
当我们在Redis中使用事务时,它基本上管道事务中的所有命令.当触发EXEC时,所有命令一起执行,从而始终保持多个命令的原子性.
流水线不一样吗?
流水线和交易如何不同?另外,为什么Redis的单线程性质不足?为什么我们明确需要流水线/事务?
Spring Boot需要@EnableTransactionManagement吗?我做了一些研究.有些人说你不需要它,因为Spring Boot已经启用它,其他人说你必须明确地使用它.所以怎么回事?
我是JTA的新手,也是基础交易经理.谁能解释每一个的优点/缺点?随意添加我没有在标题中列出的其他人.
此外,主要的应用程序服务器(WebSphere,JBoss,Glassfish)是否拥有自己的JTA兼容事务管理器?在这些环境中,您是否仍会使用这些第三方实施?
我有一些遗留代码,我现在正试图在Spring下重用.这段代码深深地嵌套在其他代码中,因此重新设计并不常用,在许多情况下都会调用,其中只有一些是通过Spring实现的.我想做的是使用Spring事务,如果已经启动了; 否则,继续使用现有(传统)数据库连接机制.我们的第一个想法是让我们的遗产类成为一个bean并使用注入TransactionPlatformManager,但似乎没有任何方法与我们的情况密切相关.一些研究表明Spring有一个叫做TransactionSynchronizationManager静态方法的类isActualTransactionActive().我的测试表明这种方法是检测Spring事务是否处于活动状态的可靠方法:
@Transactional注释的Spring服务调用时,它返回false@Transactional,它返回true我的问题:有没有更好的方法来检测交易是否有效?
假设某人(除了我)编写以下代码并将其编译为程序集:
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (var transaction = conn.BeginTransaction())
{
/* Update something in the database */
/* Then call any registered OnUpdate handlers */
InvokeOnUpdate(conn);
transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
对InvokeOnUpdate(IDbConnection conn)的调用调用了一个我可以实现并注册的事件处理程序.因此,在这个处理程序中,我将引用IDbConnection对象,但我不会引用挂起的事务.我有什么办法可以控制交易吗?在我的OnUpdate处理程序中,我想执行类似于以下内容的操作:
private void MyOnUpdateHandler(IDbConnection conn)
{
var cmd = conn.CreateCommand();
cmd.CommandText = someSQLString;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
但是,对cmd.ExecuteNonQuery()的调用会抛出InvalidOperationException,抱怨它
"当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务.该命令的Transaction属性尚未初始化".
我可以以任何方式使用挂起的事务登记我的SqlCommand cmd吗?我可以从IDbConnection对象中检索对待处理事务的引用(如果需要,我很乐意使用反射)?
默认的READ COMMITTED隔离级别是否以某种方式使select语句在事务内部的行为与不在事务中的行为不同?
我正在使用MSSQL.
transactions ×10
sql-server ×3
.net ×2
spring ×2
sql ×2
ado.net ×1
c# ×1
counter ×1
java ×1
java-ee ×1
jta ×1
mysql ×1
php ×1
pipelining ×1
redis ×1
select ×1
spring-boot ×1