mnesia主键

时间:2010-06-17 09:28:33

标签: erlang mnesia

我有两个表一个注释和一个标记,我想从注释主键中创建id以在标记表中使用它,但我不知道我在哪里做错了。我的笔记id是从另一个表计数器生成的,函数为dirty_update_counter

我对id_notes标签的功能如下所示:

Fun = fun() -> 
                mnesia:write(#tag{ id_note =0}) 
        end, 
        mnesia:transaction(Fun). 

generate_Oid(TableName) when is_atom(TableName) -> 
        F = fun() -> 
                [Oid] = mnesia:read(tag, TableName, write), 
                NewId = Oid#tag.id_note+1, 
                New = Oid#tag{id_note = NewId}, 
                mnesia:write(New), 
                NewId 
        end, 
        mnesia:transaction(F). 

insert_n(N) when is_record(N, note) -> 
        F = fun() -> 
        {atomic, Id} = generate_Oid(note), 
        New = N#note{id = Id}, 
        mnesia:write(New), 
        New 
        end, 
        mnesia:transaction(F). 

find_n(Id) when is_integer(Id) -> 
        {atomic, [N]} = mnesia:transaction(fun() -> 
                mnesia:read({note, Id}) 
                        end), 
N.

但是这个函数不会从表标记中增加我的字段id_note,尽管在我的note表中,我的id字段从计数器表增加。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可能正在寻找mnesia:dirty_update_counter/3方法。