如何在erlang中读取mnesia数据库的所有记录?
How to read all the records of mnesia database in erlang?
我是 erlang 的新手,我需要对从 mnesia 数据库中获得的所有记录进行一些操作。
Result = mnesia:dirty_read(mydatabase, {key1, key2}),
case Result of
[] ->
?DEBUG("No such record found", []);
[#mydatabase{key3 = Key3}] ->
%% some operations
end
如何在我的代码中添加一个循环来对所有记录执行某些操作?
我什至不确定上面的代码是否做到了?
我想你可以试试 all_keys(制表符)
all_keys(Tab) -> KeyList | transaction abort
This function returns a list of all keys in the table named Tab. The
semantics of this function is context sensitive. See mnesia:activity/4
for more information. In transaction context it acquires a read lock
on the entire table.
您可以使用 mnesia:foldl/3
。它遍历 table 中的所有记录,并传递 "accumulator" 值。
它没有明确的 "dirty" 对应项,因此如果您想 运行 它作为脏操作,您需要使用 mnesia:activity/2
。 (或者您可以在对 mnesia:transaction
的调用中使用它。)
在这个例子中,我实际上没有对 "accumulator" 做任何事情,始终保持 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)
我是 erlang 的新手,我需要对从 mnesia 数据库中获得的所有记录进行一些操作。
Result = mnesia:dirty_read(mydatabase, {key1, key2}),
case Result of
[] ->
?DEBUG("No such record found", []);
[#mydatabase{key3 = Key3}] ->
%% some operations
end
如何在我的代码中添加一个循环来对所有记录执行某些操作?
我什至不确定上面的代码是否做到了?
我想你可以试试 all_keys(制表符)
all_keys(Tab) -> KeyList | transaction abort
This function returns a list of all keys in the table named Tab. The semantics of this function is context sensitive. See mnesia:activity/4 for more information. In transaction context it acquires a read lock on the entire table.
您可以使用 mnesia:foldl/3
。它遍历 table 中的所有记录,并传递 "accumulator" 值。
它没有明确的 "dirty" 对应项,因此如果您想 运行 它作为脏操作,您需要使用 mnesia:activity/2
。 (或者您可以在对 mnesia:transaction
的调用中使用它。)
在这个例子中,我实际上没有对 "accumulator" 做任何事情,始终保持 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)