mnesia怎样改动表结构

Posted liguangsunls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mnesia怎样改动表结构相关的知识,希望对你有一定的参考价值。

mnesia创建的时候须要指定表record结构,假设定义的record结构改动了,就要更新数据的表结构。否则mnesia无法正常读取和写入数据。

我们最開始是这样定义结构的

-record(person, {name, age}).

然后这样建表

mnesia:create_table(person, [{disc_only_copies, nodes()}, {attributes, record_info(fields,person)}]).


有一天我们改变了这个person结构

-record(person, {name, age, money}).

我们还能够读出mnesia的数据。可是不能匹配到如今的person结构了

> mnesia:dirty_read(person, lucy).
[{person,lucy,1}]

并且我们无法再写入数据

> mnesia:dirty_write(person, #person{name = lily, age = 2, money = 0}).
** exception exit: {aborted,{bad_type,#person{name=lily,age=2, money=0}}}
     in function  mnesia:abort/1 (mnesia.erl, line 309)

可是我们还想要使用这个数据库。能够这样改动数据库

Fun = fun(X)  ->
  case X of
      {person, Name, Age} ->
           {person, Name, Age, 0};
       _ ->
           X
     end
end,
NewAttr = [name, age, money],
mnesia:transform_table(person, Fun, NewAttr, person).


參考:

http://blog.csdn.net/mycwq/article/details/30101659

以上是关于mnesia怎样改动表结构的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 改动表结构 之ALTER CONSTAINTS

PLSQL怎样导出oracle表结构

mysql怎样导出表(表结构+数据)

PLSQL怎样导出oracle表结构

PLSQL怎样导出oracle表结构和数据

怎样将结构完全一样的两个表的内容合并到一个表中,SQL语句