【问题标题】:change data of all line in erlang更改erlang中所有行的数据
【发布时间】:2013-02-20 16:43:01
【问题描述】:

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

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

    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}]). 创建您自己的记忆计数器表。在插入备份表期间,您可以使用NextKey = mnesia:dirty_update_counter(my_auto_inc,lastrec,1). 来插入新记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2023-04-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      相关资源
      最近更新 更多