如何读取erlang中mnesia数据库的所有记录?
问题描述:
我是新来的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
我怎样才能循环添加到我的代码,执行某些操作的所有记录?
我甚至不确定上面的代码是否做到这一点?
答
您可以使用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)
答
我想你可以尝试all_keys(TAB)
all_keys(表) - >键列表|事务中止
该函数返回名为Tab的表中所有键的列表。该函数的语义是上下文敏感的。有关更多信息,请参阅mnesia:activity/4 。在事务上下文中,它获取整个表上的读锁 。