標籤:des style blog http 使用 資料
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