sql-server - Sql Server 事务——使用建议

标签 sql-server transactions

我不止在一个地方看到过这句话:

“事务应尽可能短,以避免并发问题并实现最大数量的积极提交。”

这到底是什么意思?

现在我很困惑,因为我想为我的应用程序使用事务,在正常使用中,事务会同时处理来自许多客户端的数百行插入。

例如,我有一个公开方法的服务:AddObjects(List<Objects>)当然,这些对象包含其他嵌套的不同对象。

我正在考虑为执行适当操作的客户端的每个调用启动一个事务(为每个对象及其嵌套对象插入/更新/删除)。 EDIT1:我的意思是整个“AddObjects”调用的事务,以防止未定义的状态/行为。

我走错方向了吗?如果是,你会怎么做,你的建议是什么?

EDIT2:另外,我知道批量操作的交易速度很快,但它与引用的句子有些矛盾。结论是什么?

提前致谢!

最佳答案

事务必须涵盖业务特定的工作单元。它与通用“对象”无关,它必须始终以特定领域的术语表达:“账户 X 的借方和账户 Y 的贷方必须在交易中”,“减去库存项目和销售必须在交易中” ' 等等等等。所有必须一起成功或一起失败的事情都必须在事务中。如果您走的是“将对象添加到列表是一项事务”的抽象路径,那么是的,您走错了路。对象保存触发的所有插入/更新/删除都在事务中这一事实不是目的,而是副作用。正确的语义应该是“对象 X 的更新和对象 Y 的更新必须在事务中”。即使是更新单个“对象”的退化情况,仍应根据领域特定术语来考虑。

关于sql-server - Sql Server 事务——使用建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281646/

相关文章:

sql - SQL Server 中的计数除以计数(*)

SQL 查询使用 Between 进行日期搜索

java - 在测试中不使用 @Transactional 从 HibernateTemplate 迁移到 SessionFactory

java - 没有 @Transactional 注释的 Spring 托管事务

mysql - 当有锁时等待读取一行——事务隔离

sql - 当连接关闭时,未提交的事务会发生什么?

php - 在SQL连接中写入触发LOCK IN SHARED MODE

sql-server - t-sql 中的 IsNumeric 有问题吗?

sql - 在 SQL Server 中将多个结果组合成一个字符串

sql - 什么是存储过程?