【Erlang新手成长日记】Mnesia数据库CRUD操作

初始化工作:

1、(可选)启动Erlang时,设置根目录的位置:

  erl -mnesia dir Dir

用你要存储schema的目录来代替Dir。

示例:

erl -mnesia dir '"db"'

2、建立schema:

  mnesia:create_schema(DiscNodes) -> ok | {error, Reason}

官方文档:http://www.erlang.org/doc/man/mnesia.html#create_schema-1

关于schema的更多细节,参考《Erlang Programming》第295页 Configuring Mnesia

注:创建数据库时,建立schema操作,仅需要执行一次。

3、启动数据库

  mnesia:start() -> ok | {error, Reason}

创建表:

1、声明record

  Mnesia数据库表,包含Erlang的record。通常情况,record类型名就是表名。

示例:

-record(users, {username, password}).

声明record,用于创建表“users”,存储用户名“”和密码“password”。

2、创建表

  mnesia:create_table(Name, TabDef) -> {atomic, ok} | {aborted, Reason}

该函数根据TabDef创建一个名为Name的表。Name为record类型,TabDef为一个元组列表,格式为{Key, Value}。

更多细节,参考官方文档:http://www.erlang.org/doc/man/mnesia.html#create_table-2

示例:

mnesia:create_table(users, [{attributes, record_info(fields, users)}]).

C:

使用事务,在数据表中添加一条数据项:

c(Id, Username, Password) ->
    User = #users{id = Id, username = Username, password = Password},
    Fun = fun() ->
        mnesia:write(User)
    end,
    mnesia:transaction(Fun).

R:

 使用事务,查询数据表:

r(Id) ->
    Fun = fun() ->
        qlc:e(qlc:q([User || User <- mnesia:table(users), User#users.id =:= Id]))
    end,
    mnesia:transaction(Fun).

注:使用qlc模块查询,需要在文件顶部声明“-include_lib("stdlib/include/qlc.hrl").”,否则编译时会产生“Warning: qlc:q/1 called, but "qlc.hrl" not included”的警告。

U:

记录的第一个属性为主键。

数据表的默认类型是“set”。在一个集合(set)里,所有的记录有唯一的键,在一个包(bag)里,几条数据可能有相同的键,但是记录的内容是唯一的。

如果一个不唯一的数据被存储到原有的表中,冲突的记录会被简单的覆盖 。

D:

使用事务,删除数据项:

d(Id) ->
    Fun = fun() ->
        mnesia:delete({users, Id})
    end,
    mnesia:transaction(Fun).

脏操作:

1、速度大约10倍快于事务操作;

2、偶尔脏读,避免脏写。

可视化工具:

  Erlang自带一个可以看Mnesia和ETS表查看器,使用tv:start()启动。

转载于:https://www.cnblogs.com/dyingbleed/archive/2012/09/05/2668959.html

猜你喜欢

转载自blog.csdn.net/weixin_34336292/article/details/93447133
今日推荐