zoukankan      html  css  js  c++  java
  • erlang mnesia数据库设置主键自增

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

  • 相关阅读:
    [LeetCode] 157. Read N Characters Given Read4 用Read4来读取N个字符
    [LeetCode] 158. Read N Characters Given Read4 II
    AndroidManifest.xml文件详解(activity)(一)
    Android中Bitmap、Drawable、byte[]转换
    图片和byte[]数组互转
    EditText 属性
    adb server didn't ack failed to start daemon
    PhoneGap 获得设备属性Demo
    PhoneGap 第一个程序
    android手机常用分辨率
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3459067.html
Copyright © 2011-2022 走看看