erlang 如何在mnesia表中添加列

t8e9dugd  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(158)

我尝试在一个现有的mnesia表中添加新的列。为此,我使用了以下代码。

test()->

Transformer =
  fun(X)->
      #users{name = X#user.name,
           age = X#user.age,
           email = X#user.email,
          year = 1990}
end,
{atomic, ok} = mnesia:transform_table(user, Transformer,record_info(fields, users),users).

我有两张唱片

-record(user,{name,age,email}).
-record(users,{name,age,email,year}).

我的问题是,当我从user表中获取值时,它会显示为
{atomic,[{users,sachith,28,sachith@so,1990}]}
为什么从user表中检索数据时会得到users记录名?

rbl8hiat

rbl8hiat1#

表名和记录名不一定相同。您从一个名为user的表开始,该表包含user条记录,然后将所有user条记录转换为users条记录。因此,当您从该表读取数据时,它将返回users条记录,因为这是该表现在包含的内容。

j91ykkif

j91ykkif2#

如果您查看记录的内部表示,
-record(Name, {Field1,...,FieldN}).{Name,Value1,...,ValueN}表示。
因此,基本上就是将表中的{user,name,age,email}转换为{users,name,age,email,year}
但是有一种更好的迁移方法,当您以后更新记录时,它会派上用场,
查看this产品代码库,这是transformer函数的更好的代码片段,

%%-record(user,{name,age,email}). // old
%%-record(user,{name,age,email,year}).  // new

Transformer =
  fun(X)->
      #user{name = element(2,X),
           age = element(3,X),
           email = element(4,X),
          year = 1990}
end,

相关问题