0

我有两个表sms_sentsms_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 (最后一个 id sms_sent_backup)

意味着 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

所以我需要这个值: 11 来自表 sms_sent_backup

4

1 回答 1

0

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

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

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

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

于 2013-02-19T17:29:23.623 回答