我尝试在一个现有的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
记录名?
2条答案
按热度按时间rbl8hiat1#
表名和记录名不一定相同。您从一个名为
user
的表开始,该表包含user
条记录,然后将所有user
条记录转换为users
条记录。因此,当您从该表读取数据时,它将返回users
条记录,因为这是该表现在包含的内容。j91ykkif2#
如果您查看记录的内部表示,
-record(Name, {Field1,...,FieldN}).
由{Name,Value1,...,ValueN}
表示。因此,基本上就是将表中的
{user,name,age,email}
转换为{users,name,age,email,year}
。但是有一种更好的迁移方法,当您以后更新记录时,它会派上用场,
查看this产品代码库,这是
transformer
函数的更好的代码片段,