我是erlang的新手,我需要对从mnesia数据库获取的所有记录进行一些操作。
Result = mnesia:dirty_read(mydatabase, {key1, key2}),
case Result of
[] ->
?DEBUG("No such record found", []);
[#mydatabase{key3 = Key3}] ->
%% some operations
end
如何为我的代码添加循环,为所有记录执行某些操作?
我甚至不确定上面的代码是否适用?
答案 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 欲获得更多信息。在事务上下文中,它获取读锁定 在整个桌子上。