我有一個ram_copies Mnesia的設置,我可以插入記錄,我可以在他們使用位於此處下面的代碼打印:How to read all the records of mnesia database in erlang?使用Erlang的Mnesia的:讀/ 2。返回無
開始記錄:
-record(someRecord, {a=null, b=null}).
表:
mnesia:create_table(someRecord,
[{attributes, record_info(fields, someRecord)},
{index, [#someRecord.b]},
{ram_copies, Nodes},
{type, set}]),
插入:
i(rA, rB) ->
F = fun() -> mnesia:write(#someRecord{a=rA, b=rB}) end,
mnesia:transaction(F).
讀:
r(rB) ->
F = fun() -> mnesia:read({someRecord, rB}) end,
mnesia:transaction(F).
此返回{原子,結果}和結果是空的。
想知道我做錯了什麼。
謝謝!
更新:事實證明,如果我使用記錄「a」,因爲它們的鍵是有效的。但爲什麼?我已經設置爲鍵記錄「b」。
這是否工作:'mnesia:index_read(someRecord,B,#someRecord.b)'? – Dogbert
@Dogbert工作。然而,爲什麼create_table有一個不是用於「{index,[#someRecord.b]}」的鍵值(除非我使用錯誤)。如果我將rB替換爲「a」,read/2將適用於我。似乎關鍵是第一個元素,這是硬編碼嗎?另外,使用index_read和read有什麼影響? – Mike5050
我已經發布了除最後一個問題以外的所有問題的答案。我不確定這種影響。我相信它應該像搜索第一個字段一樣快,但是由於額外的索引mnesia需要維護,所以在其他操作中會有開銷。 – Dogbert