创建数据库
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 ]).