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