我有两张表 sms_sent 和 sms_sent_backup
sms_sent和sms_sent_backup的格式为:
-record(sms_sent, {id, text}).
-record(sms_sent_backup, {id, text}).
sms_sent在mnesia
中包含此值1 test1
2 test2
3 test3
和sms_sent_backup在mnesia中包含此值
8 hi
9 hello
我想开发一个函数来检索sms_sent_backup的最后一个id(值 9 ) 之后我想更改sms_sent的所有id,此id的新值是先前的值+值9(sms_sent_backup的最后一个id)
表示sms_sent的新格式为:
10 test1
11 test2
12 test3
我尝试获取 sms_sent_backup 的最后一个键但是我有这个错误
1> model:testkey().
** exception exit: {aborted,no_transaction}
in function mnesia:abort/1
我用这个函数测试:
testkey()->
LastKey = mnesia:last(sms_sent_backup).
但我想说 sms_sent_backup 包含密钥但不按顺序
含义例如 sms_sent_backup 包含以下值:
8 hi
9 hello
11 hi1
10 hello1
所以我需要从表 sms_sent_backup
中获得此值: 11答案 0 :(得分:0)
有多种方法可以做到这一点
如果您的sms_sent_backup表的类型为ordered_set,那么您可以执行LastKey = mnesia:last(sms_sent_backup).
这将为您提供最后一个键值。稍后,您可以在插入新记录时执行LastKey + 1.
在每次插入期间,将键的值存储在本地状态,并使用它来插入下一条记录。你第一次可以做mnesia:foldl找到最大的。
使用mnesia:create_table(my_auto_inc,[{type,set}]).
创建自己的mnesia计数器表。在插入备份表期间,您可以执行NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1).
来插入新记录。