这在很大程度上取决于Type of Table
,以及您在记录中更新的字段。不幸的是,你没有告诉我们关于你的桌子的一些细节。可以说,您正在根据给定字段更新多条记录。
请注意,我不建议使用该词transaction
作为表名。但是为了学习的目的,让我们继续。伪代码:
获取以下所有记录: Obj#transaction.field == Key
然后,Foreach,设置:Obj#transaction.field == Key2
然后考虑这个例子
Query List Comprehension
-include_lib("stdlib/include/qlc.hrl")。
选择(Q)->
案例记忆:is_transaction() 的
假->
F = fun(QH)-> qlc:e(QH) 结束,
mnesia:activity(transaction,F,[Q],mnesia_frag);
真-> qlc:e(Q)
结尾。
gen_update(FilterFun,UpdateFun)->
A = select(qlc:q([R || R <- mnesia:table(transaction),FilterFun(R) == true])),
[更新乐趣(X) || X <- A],
好的。
update_by_key(OldKey,NewKey)->
FilterFun = fun(#transaction{key = OldKey}) -> true;
(_) -> 错误
结尾,
UpdateFun = 乐趣(T)->
NewT = T#transaction{key = NewKey},
记忆:写(NewT),
好的
结尾,
gen_update(FilterFun,UpdateFun),
好的。
那应该这样做。看函数:
gen_update
。我曾经
funs
创建过通用对象,它们将根据任何所需的形式进行过滤,另一个将进行更新。
fun
现在,只要将记录作为参数,您就可以构建任何选择。请注意,此方法可能适用于 type 的表
set
,具体取决于您在做什么。如果您是通过 更新
primary key
,那么,您需要进行一些新的更改。