0

我有这个记录

-record(transaction, {id, transaction_code, operation_code, ip_access).

并使用此代码创建此表的克隆,名为 transaction_backup

mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
    {record_name, transaction}]).

并使用此代码将数据从事务传输到transaction_backup

mnesia:transaction(fun() ->
  Records = mnesia:select(transaction, [{'_', [], ['$_']}]),
  [ok = mnesia:write(transaction_backup, Record, write) || Record <- Records]
end).

表示表事务是否包含以下值:

1   E001  F200  127.0.01
2   E102  F300  127.0.01
3   E105  F402  127.0.01

表 transaction_backup 将包含相同的内容

1   E001  F200  127.0.01
2   E102  F300  127.0.01
3   E105  F402  127.0.01

现在我想创建一个表 transaction_backup 但这次表 transaction_backup 有其他名为idback的字段将是 transaction_backup 的唯一 id

所以我们应该以另一种方式创建 transaction_backup 而不是这样

   mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
        {record_name, transaction}]).

并且idback的值将使用此代码自动增加

idback= next_id(tranasction_backup),

next_id(T) ->
    mnesia:dirty_update_counter(counter, T, 1).

所以当我们将数据从事务传输到事务备份时,我认为应该做这样的事情

 mnesia:transaction(fun() ->
      Records = mnesia:select(transaction, [{'_', [], ['$_']}]),



F = fun() ->

                      Idback= next_id(tranasction_backup),

                        Trans = #tranasaction_backup{idback= Idback},
                        mnesia:write(Trans),
                        {ok};

        end,
    {atomic, Val} = mnesia:transaction(F),
    Val.



[ok = mnesia:write(transaction_backup, Record, write) || Record <- Records]
    end).

所以表 transaction_backup 将包含这个值

1  1   E001  F200  127.0.01
2  2   E102  F300  127.0.01
3  3   E105  F402  127.0.01

我想知道我们如何创建表 transaction_backup

正如我所说,我尝试使用:

 mnesia:create_table(transaction_backup,[{disc_copies, [node()]},{attributes, record_info(fields, transaction)},
        {record_name, transaction}]).

但在我的情况下,表transaction_backup比名为idback的表事务具有更多字段

所以为了创建表transaction_backup,我们应该以另一种方式尝试

4

1 回答 1

0

是的,您可以拥有相同的交易记录。您需要使用 idback 创建一条新记录。在写入备份表之前,您需要将所有元素从事务复制到 transaction_backup 记录。或者你可以做

 Records = mnesia:select(transaction, [{'_', [], ['$_']}]),

[ok = mnesia:write(erlang:setelement(1, erlang:insert_element(2, Record, next_id(tranasction_backup)), transaction_backup) || Record <- Records]

以上仅适用于 R16A 以后。否则你可以做

     [ok = mnesia:write(to_backup(Record, next_id(tranasction_backup))) 
|| Record <- Records].

和 to_backup 看起来像

    to_backup(Record, Id) ->
        [_H| List] = tuple_to_list(Record),
        list_to_tuple([transaction_backup, x| List]).
于 2013-02-19T18:13:11.497 回答