`
mozhenghua
  • 浏览: 319506 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

erlang mnesia 创建表记录

 
阅读更多

 通过前一篇博已经了解了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']}]).

 

分享到:
评论

相关推荐

    erlang——Mnesia用户手册.pdf

    3.4.创建新表 4、事务和其他上下文存取 4.1.事务属性 4.2.锁 4.3.脏操作 4.4.记录名与表 4.5.作业(Activity)概念和多种存取上下文 4.6.嵌套事务 4.7.模式匹配 4.8.迭代 5、其它.Mnesia.特性 ...

    Erlang 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...

    erlang mnesia 数据库基本查询

    Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...

    erlang-mnesia-19.3.6.4-1.el7.x86_64.rpm

    erlang-mnesia-19.3.6.4-1.el7.x86_64.rpm

    Mnesia User's Guide

    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 B(爱尔兰B表) ·

    mnesia数据库文档

    erlang系统自带的数据库mnesia的官方文档。

    Mnesia用户手册.zip

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时 特性的Erlang应用。

    Mnesia用户手册

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台——开放式电信平台(OTP)的一部分。

    Mnesia用户手册 4.4.10版.rar

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...

    erlang高性能集群

    erlang的高性能集群服务器,erlang解决方案。 供大家学习使用

    Mnesia table fragmentation 过程及算法分析

    Mnesia table fragmentation 过程及算法分析。erlang就算在64位下dets的空间限制仍旧是2g,同样影响了mnesia,如果有更大需求,就必须使用Mnesia的 table fragmentation 技术

    erlang编程 Introducing Erlang

    erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent

    Erlang编程指南

    “即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。..., • 使用内置的Mnesia数据库和其他表存储功能。, 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。

    ErlangB-and-ErlangC.zip_erlangB_erlangb图_erlangb表_爱尔兰C公式_爱尔兰公式

    实现爱尔兰B公式和爱尔兰C公式,功能齐全,适用于通信网课程中的实验。

    erlang_版本24.3.4.4

    erlang 安装包

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang及其应用Erlang及其应用

    Erlang及其应用Erlang及其应用Erlang及其应用

    erlang otp25 win安装包

    erlang otp25 win安装包

Global site tag (gtag.js) - Google Analytics