更改erlang中所有行的数据

时间:2013-02-19 16:19:54

标签: erlang

我有两张表 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

1 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点

  1. 如果您的sms_sent_backup表的类型为ordered_set,那么您可以执行LastKey = mnesia:last(sms_sent_backup).这将为您提供最后一个键值。稍后,您可以在插入新记录时执行LastKey + 1.

  2. 在每次插入期间,将键的值存储在本地状态,并使用它来插入下一条记录。你第一次可以做mnesia:foldl找到最大的。

  3. 使用mnesia:create_table(my_auto_inc,[{type,set}]).创建自己的mnesia计数器表。在插入备份表期间,您可以执行NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1).来插入新记录。