阅读了相关书籍和资料,总觉得入门不够简单,让人迷糊,最后还是自己总结一个简单点的入门吧。
Mnesia数据库是Erlang内置的一个DBMS,可以直接存储Erlang的各种数据结构。有其它语言编程经验的可能比较熟悉,要将某种语言中的数据结构放入数据库,就需要对其进行转换(如序列化、python的pickle等)。同时,Mnesia数据库还可以配置数据存储在内存或磁盘上,甚至在多台计算机上存储多个副本。
下面直接以程序加注释的形式来说明使用方法:
-module(mns).
-export([init/0,queryall/0,myinsert/0,delete_reco/1]).
-include_lib("stdlib/include/qlc.hrl").
-record(todo,{status=reminder,who=joe,text}).
%%数据库的初始化
init() ->
%% 在本机初始化数据库
mnesia:create_schema([node()]), %在本机节点上初始化数据库,函数的参数列表为节点列表
%% mnesia:delete_schema([node()]) 删除初始化的数据库
%% 启动数据库
mnesia:start(),
%% 创建表
mnesia:create_table(todo,[{attributes,record_info(fields,todo)}]).
insert(Reco) ->
%% 定义和插入数据
mnesia:transaction(fun() -> mnesia:write(Reco) end).
insert_recos([]) -> ok;
insert_recos([H|T]) ->
insert(H),
insert_recos(T).
myinsert() ->
Todolst = [#todo{},#todo{status=done},#todo{text="abcccc"}],
insert_recos(Todolst).
delete_reco(Item) ->
F = fun() -> mnesia:delete({todo,Item}) end,
mnesia:transaction(F).
%% 定义数据查询工具函数
query(Q) ->
F = fun() ->qlc:e(Q) end,
{atomic,Val} = mnesia:transaction(F),
Val.
%% 定义查询表中所有数据记录
queryall() ->
query(qlc:q([X || X <- mnesia:table(todo)])).
执行过程如下图所示: