了解数据库中的事务

时间:2012-04-01 14:50:52

标签: database transactions datamapper

我是数据库应用程序的新手,我试图使用Datamapper来创建一个ruby Web应用程序。

我偶然发现了一条我不明白的代码:

transaction do |txn|
    link = Link.new(:identifier => custom)
    link.url = Url.create(:original => original)
    link.save   
end

我有几个问题:交易究竟是什么?为什么这是首选,而不仅仅是:

link = Link.new(:identifier => custom)
link.url = Url.create(:original => original)
link.save   

我应该何时考虑使用交易?什么是最好的用例?有没有可用的在线资源,我可以阅读更多关于这些概念的信息。

谢谢!

2 个答案:

答案 0 :(得分:3)

交易是一个不可分割的工作单位。这个想法来自数据库世界,并与数据选择/更新的问题有关。请考虑以下情况:

  1. 用户A要求输入对象O以进行更改。
  2. 当A正在做他/她的东西时,用户B要求提供相同的对象。对象O当前对两个用户都是相同的。
  3. 然后A将更新放入数据库,将更改的属性O1添加到对象O.用户B没有得到此更改 - 他的对象O仍然与之前相同。
  4. B将更新属性O2的数据库更新到对象O.对O1的更改实际上已丢失。
  5. 基本上,它与多用户访问和更改有关 - 出现了几种问题。

    事务还用于将不同的操作耦合到一个逻辑处理语句中。例如,您需要删除具有所有相关照片的用户。

    这个主题在一篇文章中非常广泛,因此我建议您阅读以下文章:wiki#1wiki#2

答案 1 :(得分:1)

事务是一系列指令,在执行时被视为一条原子指令。

这意味着所有指令必须成功才能使事务成功。如果只有其中一个失败,则返回事务开始前的状态。例如,这有利于容错。

交易有用的另一个领域是并发应用程序。使用交易可以避免其他流程的干扰。

希望这有帮助。