【发布时间】:2015-12-20 09:59:14
【问题描述】:
我正在使用 mnesia 表。这个表有两个属性(主键和它的值)。 现在我正在尝试从 mnesia 表中删除一个元组。我正在使用 mnesia 的 delete/1 函数进行删除。这个函数需要表名和对应于必须删除的元组的键。我的问题是我该如何处理当与传递的键对应的元组不存在时的场景。这个删除函数每次都会给出{atomic,ok}?
【问题讨论】:
我正在使用 mnesia 表。这个表有两个属性(主键和它的值)。 现在我正在尝试从 mnesia 表中删除一个元组。我正在使用 mnesia 的 delete/1 函数进行删除。这个函数需要表名和对应于必须删除的元组的键。我的问题是我该如何处理当与传递的键对应的元组不存在时的场景。这个删除函数每次都会给出{atomic,ok}?
【问题讨论】:
对于您的情况,您必须先阅读记录,然后才能将其删除。为了防止“读取”和“删除”操作之间的其他事务访问记录,请在读取记录时使用“写入”锁定类型。它为您的交易提供了对它的独占访问权限:
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).
【讨论】: