【问题标题】:mnesia primary keymnesia 主键
【发布时间】:2011-03-04 21:00:17
【问题描述】:

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

id_notes from 标签的函数如下所示:

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,尽管事实上在我的笔记表中,我的 id 字段是从计数器表中增加的。

提前感谢您的帮助。

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    mnesia:dirty_update_counter/3 方法可能正是您想要的。

    【讨论】:

    • 首先非常感谢您的回答。我的函数看起来像这样:new_id(Id) -> mnesia:dirty_update_counter(note, Id, 1)。
    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 2010-11-14
    • 2013-05-15
    • 2012-06-08
    • 2012-12-14
    • 2011-05-04
    • 2010-10-13
    • 2013-06-20
    相关资源
    最近更新 更多