首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交易理论

交易理论
EN

Stack Overflow用户
提问于 2009-04-03 06:36:53
回答 2查看 297关注 0票数 1

(我在DAO模式实现中有一个简单的CRUD API。)所有操作(保存、加载、更新、删除)都有一个必须提供的事务id。所以,例如。可以这样做:

..。

代码语言:javascript
复制
id = begintransaction();
dao.save(o, id);
sao.update(o2, id);
rollback(id);

除了加载调用之外的所有示例似乎都很直观。但是,一旦您开始从数据库加载对象,事情就会“感觉”有点不同。根据定义,加载操作是否与事务相关?或者我的加载操作应该被算作单次工作量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-03 06:41:34

取决于您正在使用的事务隔离级别(http://en.wikipedia.org/wiki/Isolation_(database_systems),但通常它们应该是事务的一部分。如果其他人正在更新您试图读取的数据,该怎么办?如果读取操作不是事务性的,那么您将获得旧数据,并且您可能对最新数据感兴趣。

票数 4
EN

Stack Overflow用户

发布于 2009-04-03 07:13:48

如果数据库设置为适当的隔离级别,则只能从创建它们的事务中读取未提交的写操作。例如,在Oracle中,如果一个过程插入或更新一行,然后(未提交)调用另一个过程,该过程使用“杂注autonomous_transaction”在单独的事务中运行,则该另一个过程看不到新行。(顺便说一句,这是一种搬起石头砸自己脚的好方法)。

因此,您应该始终将加载操作视为与事务相关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/712750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档