通过前一篇博已经了解了mnesia数据库如何初始化,如何启动,在这篇博客中你将了解到如何在 mnesia数据库上创建表,并且如何对创建的表进行增删改查操作。
因为创建mnesia数据库过程中需要使用到erlang的record数据结构,所以得先写一个create_tables的模块来封装初始化表的操作,以下是create_tables.erl 的代码:
-module(create_tables). %% ==================================================================== %% API functions %% ==================================================================== -export([init_tables/0,insert_user/2]). %% ==================================================================== %% Internal functions %% ==================================================================== -record(user,{id,name}). init_tables()-> io:format("~p~n", [record_info(fields,user)]), mnesia:create_table(user, [{attributes,record_info(fields,user)}]). insert_user(Id,Name)-> mnesia:dirty_write(#user{id=Id,name=Name}).
首先在文件头部需要定义一个名为user的record的数据结构用来描述用户数据结构,在init_tables 方法中
调用了mnesia:create_table/2 方法,该方法的第二个参数有其他可选参数可以填,但是在这里都是用默认值。其中最重要的两个可选参数是:持久化类型,和键值类型,默认的持久化类型是ram内存保存的,键值类型是set(键值唯一,且键值是按照hash结构存储的,如果需要键值重复,可选用bag类型或者ordered_set类型)。
这里需要说明的是定义的user记录和表名“user”并没有绑定的关系,表名完全可以用另外名称。
在方法体中调用了mneisa的dirty_write 方法,与这个方法对应的是write方法,一个是脏写,一个是非脏写,区别是后者写入需要在一个事务中,如果事务中的任何一个步骤失败都会导致事务回滚,而dirty_write方法不会。
结下来我们就在shell中执行以下创建表的操作:
编译create_tables 模块
c(create_tables). create_tables:init_tables(). create_table:insert_user(123,"mozhenghua"). create_table:insert_user(122,"baisui").
好现在我们创建了一张名字叫user的内存表,并且向表中插入了两条记录。接下来我们就可以试试查询操作了。
mnesia:dirty_read(user,123)
通过主键查询用户表的记录。需要说明的是在记录中的第一个属性是作为表的主键索引存储的。
如果不是是要通过name来查询用户记录的话,可以使用dirty_select/2 方法,通过使用带匹配规范的select来进行查询,这是一种更灵活的查询方法,这个东西极其复杂,好在进行简单的查询还是简洁明了。
可以使用这样的规范来进行查询:
mnesia:dirty_select(user,[{MatchHead.[Guard],[Result]}]).
MatchHead: 是一个erlang的项式样,用于描述查询模式,
Guard:是一个结果结合过滤器
Result:用以描述查询结果的格式
例如现在要查询 name为“baisui”的记录,可以这么写:
mnesia:dirty_select(user, [{#user{id='_',name="baisui"},[],['$_']}]).
这个条件式初看起来比较晦涩难懂,且听我的分析 ‘_’ 的意思是配所有所有结果,这个写法只能出现在MatchHead中。
['$_'] 这个的意思是结果是要得到一整条user记录。
如果在结果中只需要得到id字段,那查询逻辑可以这样写:
mnesia:dirty_select(user, [{#user{id='$1',name="baisui"},[],['$1']}]).
相关推荐
3.4.创建新表 4、事务和其他上下文存取 4.1.事务属性 4.2.锁 4.3.脏操作 4.4.记录名与表 4.5.作业(Activity)概念和多种存取上下文 4.6.嵌套事务 4.7.模式匹配 4.8.迭代 5、其它.Mnesia.特性 ...
Management System, appropriate for telecommunications applications and other Erlang applications which require continuous operation and soft real-time properties. It is one section of the Open Telecom...
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...
erlang-mnesia-19.3.6.4-1.el7.x86_64.rpm
Examples are included how to start an Erlang session, specify a Mnesia database directory, initialize a database schema, start Mnesia, and create tables. Initial prototyping of record definitions is ...
工作中经常用到的哦。ERLANG B(爱尔兰B表) ·
erlang系统自带的数据库mnesia的官方文档。
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时 特性的Erlang应用。
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台——开放式电信平台(OTP)的一部分。
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...
erlang的高性能集群服务器,erlang解决方案。 供大家学习使用
Mnesia table fragmentation 过程及算法分析。erlang就算在64位下dets的空间限制仍旧是2g,同样影响了mnesia,如果有更大需求,就必须使用Mnesia的 table fragmentation 技术
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。..., • 使用内置的Mnesia数据库和其他表存储功能。, 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。
实现爱尔兰B公式和爱尔兰C公式,功能齐全,适用于通信网课程中的实验。
erlang 安装包
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
Erlang及其应用Erlang及其应用Erlang及其应用
erlang otp25 win安装包