mnesia 入门1

创建数据库



erl -mnesia dir '"/tmp/funky"'    指定 mnesia 文件目录

mnesia:create_schema([node()]).   创建节点

mnesia:start().   启动节点

mnesia:info().查看数据库情况

mnesia:create_table(funky, []).  创建表



创建company 的数据库 

% erl -mnesia dir '"/ldisc/scratch/Mnesia.Company"'
Erlang (BEAM) emulator version 4.9
Eshell V4.9 (abort with ^G)
1> mnesia:create_schema([node()]).
ok
2> mnesia:start().
ok


新建   company.hrl 这个文件定义表

内容如下

-record(employee,{emp_no,name,salary,sex,phone,room_no}).
-record(dept,{id,name}).
-record(project,{name,number}).
-record(manager,{ emp,dept}).
-record(at_dep,{ emp,dept_id}).
-record(in_proj,{ emp,proj_name}).



新建  company.erl  文件创建表

内容如下

%%%company.erl

-module(company).
-include_lib("stdlib/include/qlc.hrl").
-include("company.hrl").
-export([area/0]).

 
area() ->
mnesia:create_table(employee,[{attributes, record_info(fields, employee)}]),
mnesia:create_table(dept,[{attributes, record_info(fields, dept)}]),
mnesia:create_table(project,[{attributes, record_info(fields, project)}]),mnesia:create_table(manager, [{type, bag},{attributes, record_info(fields, manager)}]),
mnesia:create_table(at_dep,[{attributes, record_info(fields, at_dep)}]),

mnesia:create_table(in_proj, [{type, bag},{attributes, record_info(fields, in_proj)}]).







新建 insertcom.erl  插入数据

%%%insertcom.erl
-module(insertcom).
-include_lib("stdlib/include/qlc.hrl").
-include("company.hrl").
-export([insert_emp/3]).

insert_emp(Emp, DeptId, ProjNames) ->  
Ename = Emp#employee.name,  
      Fun = fun() ->  
        mnesia:write(Emp),  
        AtDep = #at_dep{emp = Ename, dept_id = DeptId},  
        mnesia:write(AtDep),  
        mk_projs(Ename, ProjNames)  
      end,  

      mnesia:transaction(Fun).  
      
     mk_projs(Ename, [ProjName|Tail]) ->  
      mnesia:write(#in_proj{emp = Ename, proj_name = ProjName}),  
      mk_projs(Ename, Tail);  
      mk_projs(_, []) -> ok. 





c(insertcom).   编译 erl

rr("company.hrl").     加载 hrl 到shell



执行命令导入数据到数据库

Emp=#employee{emp_no=1,name=liqiang,salary=29,hone=1234567,room_no={12,14,32}}.
insertcom:insert_emp(Emp, 'B/sfr', [1001,1002,1003 ]).  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值