Mnesia删除错误

时间:2015-09-23 07:31:08

标签: erlang ejabberd mnesia

我正在使用mnesia table.This表有两个属性(主键及其值)。 现在我正在尝试从mnesia table中删除一个元组。我正在使用mnesia的delete / 1函数进行删除。这个函数采用表名和对应于元组的键来进行删除。我的问题是如何处理当传递密钥对应的元组不存在时,这个删除函数每次给出{atomic,ok}吗?

1 个答案:

答案 0 :(得分:3)

对于您的情况,您必须先读取记录,然后才删除它。为防止从“读取”和“删除”操作之间的其他事务访问记录,请在读取记录时使用“写入”锁定类型。它为您的交易提供了独家访问权限:

delete_record(Table, Key) ->
    F = fun () ->
            case mnesia:read(Table, Key, write) of
                [Record] ->
                    mnesia:delete({Table, Key}),
                    {ok, Record};
                [] ->
                    mnesia:abort(not_exist)
            end
        end,
    mnesia:transaction(F).