视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
erlangmnesia数据库设置主键自增
2020-11-09 08:11:57 责编:小采
文档


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

下载本文
显示全文
专题