Я использую таблицу мнезии. Эта таблица имеет два атрибута (первичный ключ и его значение). Теперь я пытаюсь удалить кортеж из таблицы мнезии. Я использую функцию удаления / 1 мнезии для целей удаления. Эта функция принимает имя таблицы и ключ, соответствующий кортежу, для которого необходимо произвести удаление. Моя проблема в том, как я могу справиться с этим. сценарий, когда отсутствует кортеж, соответствующий переданному ключу. Эта функция удаления каждый раз выдает {atomic, ok}?
Ошибка удаления 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).
person
Danil Onishchenko
schedule
23.09.2015
Нет ли другой альтернативы?. Значит, существует ли какая-то функция удаления, которая может зафиксировать эту проблему?
- person Geek; 23.09.2015
Насколько я знаю, нет.
- person Danil Onishchenko; 23.09.2015