Heim > Datenbank > MySQL-Tutorial > erlang mnesia数据库设置主键自增

erlang mnesia数据库设置主键自增

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:11:57
Original
1255 Leute haben es durchsucht

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.
Nach dem Login kopieren

运行代码:

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().
Nach dem Login kopieren

Mnesia数据库视图:

erlang mnesia数据库设置主键自增



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage