如何在erlang中读取mnesia数据库的所有记录?

时间:2016-03-07 16:56:07

标签: erlang mnesia

我是erlang的新手,我需要对从mnesia数据库获取的所有记录进行一些操作。

Result = mnesia:dirty_read(mydatabase, {key1, key2}),
        case Result of 
            [] ->
                ?DEBUG("No such record found", []);
            [#mydatabase{key3 = Key3}] ->
                %% some operations
        end

如何为我的代码添加循环,为所有记录执行某些操作?

我甚至不确定上面的代码是否适用?

2 个答案:

答案 0 :(得分:6)

您可以使用mnesia:foldl/3。它迭代表中的所有记录,传递一个"累加器"值。

它没有明确的"脏"对应的,所以如果你想把它作为一个脏操作运行,你需要使用mnesia:activity/2。 (或者您可以在调用mnesia:transaction时使用它。)

在这个例子中,我实际上并没有对"累加器"做任何事情,只留下ignored_acc

mnesia:activity(sync_dirty,
  fun() ->
      mnesia:foldl(
          fun(#mydatabase{}, Acc) ->
              %% do something with the record here
              Acc
          end,
          ignored_acc,
          my_table)
  end)

答案 1 :(得分:3)

我认为你可以尝试all_keys(Tab)

  

all_keys(标签) - > KeyList |交易中止

     

此函数返回名为Tab的表中所有键的列表。该   此函数的语义是上下文敏感的。见mnesia:activity / 4   欲获得更多信息。在事务上下文中,它获取读锁定   在整个桌子上。