Erlang 在两个mnesia表之间传输数据

Erlang 在两个mnesia表之间传输数据,erlang,Erlang,我有两张桌子,柜台和柜台 -record(counter, {key, value}). -record(count, {key, value}). create() -> mnesia:create_schema([node()]), mnesia:start(), mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {

我有两张桌子,柜台和柜台

   -record(counter, {key, value}).
    -record(count, {key, value}).


    create() ->
        mnesia:create_schema([node()]),
        mnesia:start(),
        mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {disc_copies, [node()]}]),
        mnesia:create_table(count, [{attributes, record_info(fields, count)}, {disc_copies, [node()]}]),



    mnesia:stop().
但是当我试着运行这个函数时

backup()->

    mnesia:transaction(fun() ->
  Records = mnesia:select(counter, [{'_', [], ['$_']}]),
  [ok = mnesia:write(count, Record, write) || Record <- Records]
end).
当我使用您的代码时:

mnesia:create_table(count, [{record_name, counter}, {attributes, record_info(fields, counter)}, {disc_copies, [node()]}]).
当我尝试运行model:reset()时,它会删除表计数和表计数器的数据

我的目标就是删除计数器的数据

这是reset()的代码


您正试图在计数表中写入计数器记录,这将导致错误。有两种方法可以做到这一点

  • 或者使用一个名为counter的记录,也可以在for count表中使用 mnesia:create_表(计数,[{record_name,counter},{attributes,record_info(fields,counter)},{disc_copies,[node()]}])

  • 如果您有其他字段,则无法执行上述操作,则可以在写入之前将所需元素从计数器记录复制到计数记录

  • mnesia:create_table(count, [{record_name, counter}, {attributes, record_info(fields, counter)}, {disc_copies, [node()]}]).
    
    reset() ->
        stop(),
        destroy(),
        create(),
        start(),
    
        {ok}.
    
    
    destroy() ->
        mnesia:start(),
        mnesia:delete_table(counter),
        mnesia:delete_table(person),
        mnesia:stop(),
        mnesia:delete_schema([node()]).
    
    
    create() ->
        mnesia:create_schema([node()]),
        mnesia:start(),
        mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {disc_copies, [node()]}]),
        mnesia:create_table(person, [{attributes, record_info(fields, person)}, {disc_copies, [node()]}]),
      mnesia:create_table(person_backup,[{disc_copies, [node()]},{attributes, record_info(fields, person)},
        {record_name, person}]),
        mnesia:stop().