如何读取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 。在事务上下文中,它获取整个表上的读锁 。