您的位置:首页 > 其它

[Erlang]Mnesia设置主键自增

2015-06-03 17:19 155 查看
Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样,我们也创建这样一个表erlang_sequence,用来索引其他表的自增id,看似麻烦,效果还是很理想。[plain] view plaincopy



-module(m).  
-export([init/0, reg/2]).  
-record(user, {id, name, age}).  
-record(erlang_sequence, {name, seq}).%自增索引表,维护其他表的自增id  
  
init() ->  
    mnesia:create_schema([node()]),  
    mnesia:start(),  
    mnesia:create_table(erlang_sequence, [{attributes, record_info(fields,  
      erlang_sequence)} , {type,set}, {disc_copies, [node()]} ]),  
    mnesia:create_table(user, [{attributes, record_info(fields, user)} ,  
      {type,set}, {disc_copies, [node()]} ]),  
    ok.  
  
reg(Name, Age) ->  
    F = fun() ->  
        UserId = mnesia:dirty_update_counter(erlang_sequence, user, 1),  
        User = #user{id = UserId, name = Name, age = Age },  
        mnesia:write(User)  
    end,  
    mnesia:transaction(F),  
    ok.  
运行代码:[plain] view plaincopy



D:\>erl -mnesia dir '"mnesia"'  
Eshell V5.10.2  (abort with ^G)  
1> c(m).  
{ok,m}  
2> m:init().  
ok  
3> m:reg("xiaomin",18).  
ok  
4> m:reg("xiaohong",17).  
ok  
5> tv:start().  
<0.92.0>  
Mnesia数据库视图:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  erlang