Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧。
mnesia判断表是否存在
%% 确保已经 mnesia:start(). lists:member(Tab, mnesia:system_info(tables)).
mnesia检查数据库是否创建
case mnesia:system_info(use_dir) of true -> alread_created; _ -> mnesia:create_schema([node()]) end
mnesia:change_table_copy_type(person, node(), disc_copies)
遍历mnesia表(效率较高)
lists:foldl( fun(Key, Acc) -> [Result] = mnesia:dirty_read(Tab, Key), [Result|Acc] end, [], mnesia:dirty_all_keys(Tab)).
%% -record(person, {name, age}). %% 改成 %% -record(person, {name, age, money}). Fun = fun({person, Name, Age}) -> {person, Name, Age, 0}; (X) -> X end, Attr = record_info(fields, person), %%也就是 [name, age, money] mnesia:transform_table(db_person, Fun, Attr, person).