语言陷阱:mnesia数据库中的record的顺序

昨天在erlang下弄了个数据库,当更新数据的时候,发现了一些些问题。数据类似下面的记录:

       -record(counter, {
	   type,
	   value
	   } ) .
       -record(class, {
                      name,
                      id}).
       

抱歉使用C++的高亮方式,没有erlang的高亮方式【换了个插件,支持了。】。
counter用来记录class中的数量,class中有两个数据段,名字和id。因为考虑一个名字和一个id对应,所以创建表的时候使用{type,set},{index, [id]}来设置。当我更新数据的时候,如果名字相同的话,后面更新的id会将前一个覆盖掉。比如{“张三”,02},{“张三”,04},记录完之后会只有一个{“张三”,04},很显然,后来的覆盖了之前存在的。但如果将class的结构编程这样:

       -record(class,{id,name}).

结果便对了,很显然,mnesia使用数据记录的第一个来表示数据是否相同。而不是数据表设置中的{index,[id]}。
我使用的erlang版本是5.6.5,并不是最新的,在最新的之中是否还是这样就不清楚了。

2条评论

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据