在erlang中将数据从表传输到另一个表

时间:2013-02-12 13:44:52

标签: erlang mnesia

我在我的数据库mnesia中有两个具有以下语法的表:

-record(person, {firstname, lastname,adress}).
-record(personBackup, {firstname, lastname,adress}).

我想将表 person 中的数据传输到表 personBackup

我认为我应该用这种语法创建两个表(我同意你的想法)

mnesia:create_table(person,
   [{disc_copies, [node()]},
    {attributes, record_info(fields, person)}]),
mnesia:create_table(person_backup,
   [{disc_copies, [node()]},
    {attributes, record_info(fields, person)},
    {record_name, person}]),

现在我有一个名为验证

的功能

在此功能中,我将进行测试,如果测试已经过验证,我应该将数据从传输到 person_backup ,然后我应该重置< / strong>

这是我的功能

verify(Form)->

if Form =:= 40 ->

%%here I should transert data from person to person_backup  : read all lines from person and write this lines into person_backup

reset();

Form =/= 40 ->
io:format("it is ok")
end.

这是重置

功能
reset() ->
    stop(),
    destroy(),
    create(),
    start(),
    {ok}.

2 个答案:

答案 0 :(得分:0)

您不必为每个表使用单独的记录定义。 mnesia:create_table选择了record_name,因此您可以像这样创建表格:

mnesia:create_table(person,
   [{disc_copies, [node()]},
    {attributes, record_info(fields, person)}]),
mnesia:create_table(person_backup,
   [{disc_copies, [node()]},
    {attributes, record_info(fields, person)},
    {record_name, person}]),

record_name的值默认为表的名称,因此无需为person指定它。 (我将personBackup更改为person_backup,因为与变量不同,Erlang原子通常在没有驼峰的情况下编写。)

然后你可以在两个表中放入相同类型的记录。阅读或选择person,并写信至person_backup,无需转换。

答案 1 :(得分:0)

每个表都不需要单独的记录定义。变量90和80将起到作用。如果您希望选择recod_name,可以使用mnesia:create_table

@ legoscia,除第6行外,你的所有内容都是正确的。

mnesia:create_table(person,如果玩家值= 1

  

这样结果可以打印所有副本和节点。