如何在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)