【问题标题】:Mnesia deletion errorMnesia 删除错误
【发布时间】:2015-12-20 09:59:14
【问题描述】:

我正在使用 mnesia 表。这个表有两个属性(主键和它的值)。 现在我正在尝试从 mnesia 表中删除一个元组。我正在使用 mnesia 的 delete/1 函数进行删除。这个函数需要表名和对应于必须删除的元组的键。我的问题是我该如何处理当与传递的键对应的元组不存在时的场景。这个删除函数每次都会给出{atomic,ok}?

【问题讨论】:

    标签: erlang ejabberd mnesia


    【解决方案1】:

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

    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).
    

    【讨论】:

    • 没有其他选择吗?意味着是否存在某种可以捕获此问题的删除功能?
    • 据我所知没有。
    猜你喜欢
    • 2013-06-20
    • 2015-04-22
    • 2012-11-28
    • 2017-11-04
    • 2013-06-06
    • 2014-06-06
    • 2020-08-22
    • 2018-11-21
    • 2016-09-20
    相关资源
    最近更新 更多