原文地址: http://www.cnblogs.com/bluefrog/archive/2012/05/16/2504625.html

本来是项目合作的,可是你却一而再再而三的使用这招,我处理愤怒了,自己来。先学习下 mnesia 的操作先:

-module(test_mnesia).
-compile(export_all).-include_lib("stdlib/include/qlc.hrl").%% 定义记录结构
-record(shop,{item,quantity,cost}).
-record(cost,{name,price}).
-record(design,{id,plan}).start() ->mnesia:start(),%% 等待表的加载mnesia:wait_for_tables([shop,cost,design],20000).%% 初始化mnesia表结构
init() ->mnesia:create_schema([node()]),mnesia:start(),%% 表创建 mnesia:create_talbe(TableName,[Args])%% {type,Type}  set,ordered_set,bag 表类型%% {ram_copies,NodeList} NodeList每个节点都有内存备份 默认为这个{ram_copies,[node()]}%% {disc_copies,NodeList} NodeList每个节点都有内存备份和磁盘备份 %% {disc_only_copies,NodeList} NodeList每个节点有磁盘备份 %% {attributes,AtomList} 要保存的列名称 一般和record有关 record_info(fields,RecordName)mnesia:create_table(shop,[{attributes,record_info(fields,shop)}]), %% 创建shop表
    mnesia:create_table(cost,[{attributes,record_info(fields,cost)}]),mnesia:create_table(design,[{attributes,record_info(fields,design)}]),mnesia:stop().%% 加载测试数据
reset_tables() ->mnesia:clear_table(shop),mnesia:clear_table(cost),F = fun() ->lists:foreach(fun mnesia:write/1,example_tables())end,mnesia:transaction(F).%% 测试数据
example_tables() ->[%% shop table{shop,apple,20,2.3},{shop,orange,100,3.8},{shop,pear,200,3.6},{shop,banana,420,4.5},{shop,potato,2456,1.2},%% cost table{cost,apple,1.5},{cost,orange,2.4},{cost,pear,2.2},{cost,banana,1.6},{cost,potato,0.6}].%%== 查询 =============================================================

do(Q) ->F = fun() -> qlc:e(Q) end,{atomic,Val} = mnesia:transaction(F),Val.%% SELECT * FROM shop
%% 选取所有列
demo(select_shop) ->do(qlc:q([X || X <- mnesia:table(shop)]));%% SELECT  item,quantity FROM shop
%% 选取指定列
demo(select_some) ->do(qlc:q([{X#shop.item, X#shop.quantity} || X <- mnesia:table(shop)]));%% SELECT * FROM shop WHERE shop.quantity < 250
%% 选取指定条件的数据
demo(where) ->do(qlc:q([X || X <- mnesia:table(shop),X#shop.quantity < 250]));%% 关联查询
%% SELECT shop.* FROM shop,cost wHERE shop.item = cost.name AND cost.price < 2 AND shop.quantity < 250
demo(join) ->do(qlc:q([X || X <- mnesia:table(shop),X#shop.quantity < 250,Y <- mnesia:table(cost),X#shop.item =:= Y#cost.name,Y#cost.price < 2])).%% == 数据操作 ===============================================%% 增加一行
add_shop_item(Name,Quantity,Cost) ->Row = #shop{item = Name,quantity = Quantity, cost = Cost},F = fun() ->mnesia:write(Row)end,mnesia:transaction(F).%% 删除一行
remove_shop_item(Item) ->Oid = {shop,Item},F = fun() ->mnesia:delete(Oid)end,mnesia:transaction(F).%% 取消一个事务
former(Nwant) ->F = fun() ->%% find the num of apples[Apple] = mnesia:read({shop,apple}),Napples = Apple#shop.quantity,%% update the databaseNewApple = Apple#shop{quantity = Napples + 2 * Nwant},mnesia:write(NewApple),%% find the num of oranges[Orange] = mnesia:read({shop,orange}),Noranges = Orange#shop.quantity,if Noranges >= Nwant ->%% update the databaseNum = Noranges - Nwant,NewOrange = Orange#shop{quantity = Num},mnesia:write(NewOrange);true ->%% no enough oranges 取消事务
                    mnesia:abort(oranges)endend,mnesia:transaction(F).%% 保存复杂数据
add_plans() ->D1 = #design{id = {joe,1},plan = {circle,10}},D2 = #design{id = fred,plan = {rectangle,[10,5]}},F = fun() ->mnesia:write(D1),mnesia:write(D2)end,mnesia:transaction(F).%% 获复杂数据
get_plans(PlanId) ->F = fun() -> mnesia:read({design,PlanId}) end,mnesia:transaction(F).

转载于:https://www.cnblogs.com/AloneSword/p/4939800.html

[erlang] mnesia相关推荐

  1. erlang mnesia数据库简单应用

    mnesia是erlang自带的分布式数据库,基于ets和dets实现的.mnesia兼顾了dets的持久性和ets的高性能,可以自动在多个erlang节点间同步数据库.最关键的是,mnesia实现了 ...

  2. 基于Erlang语言的视频相似推荐系统 | 深度

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...

  3. [转]Erlang 大量写入出警报

    Posts - 71  Articles - 6  Comments - 7 [集]erlang常用配置文件收集 http://www.cnblogs.com/gordonchao/archive/2 ...

  4. erlang r19里面的mnesia_ext

    r19据说支持了mnesia_ext,终于可以给那个恶心2gb limit的mnesia换存储引擎了 先下载r19源码,编译 ./otp_build all -a ~/dev/erlang/r19 . ...

  5. Erlang(起个中文名:易浪)不能错过的盛宴

    评:erlang(起个中文名:易浪),在穿戴设备技术,云技术,大数据,游戏服务器等等高并发分布式必然大有用处,这个语言必火!-传统语言除了java和c,其他的必然会死去,今后一定会出现新的类erlan ...

  6. erlang在NotePad++下的高亮

    转自:http://www.roberthorvick.com/2009/07/08/syntax-highlighing-for-erlang-in-notepad/ Syntax Highligh ...

  7. mnesia数据库学习笔记四

    杂项 前二章讲了如何启动数据库,如何构建数据库,接下来会为讲一些创建分布式容错数据所需的高级特征: 索引 分布式和容错 表分段 本地内容表 无磁盘节点 高级方案管理 调用应用程序 并行进程 原形研究 ...

  8. “【第二届】Erlang Fans交流会”议程

    http://erlang-china.org/news/erlang-fans-fair-schedule.html [第一场:2007-10-13 上午] 10:00 签到(请填写个人资料或提供名 ...

  9. 64位CentOS6.2安装erlang及rabbitmqServer

    CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1.操作系统环境(CentOS 6.2 64bit) 1 [root@HAproxy ~]# cat /etc/is ...

最新文章

  1. DataGridView和ListT绑定不显示问题
  2. 数据结构与算法之反转单向链表和双向链表
  3. 如何查看linux中文件打开情况
  4. 深入解读 Knative Eventing 0.7 版本新特性
  5. 不好意思,观察者模式跟发布订阅模式就是不一样
  6. UNIX环境高级编程之第6章:系统数据文件和信息
  7. Atitit 摄像头与主机连接方式大总结
  8. PADS Layout 滴泪、敷铜和删除
  9. 苹果手表出现,请在iphone 打开apple watch 应用,前生Passcode,轻点密码重试
  10. HTML+css样式制作静态天猫官网部分页面
  11. Ubuntu 论坛遭到入侵,用户数据泄露
  12. java openoffic excel转html,Java利用OpenOffice進行將word,excel轉化成html解析到界面(上)...
  13. 各个国家的人有什么特点?
  14. Pagination 分页实现跳转首页和尾页
  15. 2008欧锦赛 球员名单 A组
  16. 指向指针数组的指针和指针数组类型的指针
  17. 同步linux服务器时间
  18. 关于.net framework4.0安装失败,“安装时发生严重错误”
  19. 有什么软件可以测试面膜的好坏,检验面膜好坏的小妙招
  20. 怎么在 Windows 下生成 文档树 tree?

热门文章

  1. 改变你一生命运的话语 不得不信
  2. android在activity中锁屏解锁后重走OnCreate的问题的解决办法
  3. 如何解决无法显示隐藏文件文件夹
  4. c语言的point函数,C语言中friend友元函数详细解析
  5. c语言oj1124,程序设计入门——C语言 第2周编程练习 1时间换算(5分)
  6. Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)
  7. loadrunner mysql_LoadRunner访问Mysql数据库
  8. c 语言 移位四舍五入,关于C 语言中的四舍五入问题
  9. CSITOOL安装接收CSI数据
  10. Matlab x2fx函数