erlang mnesia php,erlang mnesia数据库设置主键自增

Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增

Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。

参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样,我们也创建这样一个表erlang_sequence,用来索引其他表的自增id,看似麻烦,效果还是很理想。

-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.

运行代码:

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数据库视图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20131204140723109%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXljd3E%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fmycwq%2Farticle%2Fdetails%2F16487895

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值