zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

erlang mnesia 数据库基本查询

数据库 查询 基本 erlang
2023-09-11 14:19:44 时间
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia 数据库查询。 示例中表结构的定义: %% 账号表结构 -record( y_account,{ id, account, password }). %% 资料表结构 -record( y_info, { id, nickname, birthday, sex }). 1、Select 查询 查询全部记录
F = fun() - Q = qlc:q([[E#y_account.id, E#y_account.account] || E - mnesia:table(y_account)]), qlc:e(Q) mnesia:transaction(F).
2、Insert / Update 操作 mnesia是根据主键去更新记录的,如果主键不存在则插入
%%=============================================== %%    insert into y_account (id,account,password) values(5,"xiaohong","123") %%     on duplicate key update account="xiaohong",password="123"; %%=============================================== %% 使用 mnesia:write F = fun() - Acc = #y_account{id = 5, account="xiaohong", password="123"}, mnesia:write(Acc) mnesia:transaction(F).
%%=============================================== %%    select account from y_account where id 5 %%=============================================== %% 使用 mnesia:select F = fun() - MatchHead = #y_account{id = $1, account = $2, _ = _ }, Guard = [{ , $1, 5}], Result = [$2], mnesia:select(y_account, [{MatchHead, Guard, Result}]) mnesia:transaction(F). %% 使用 qlc F = fun() - Q = qlc:q([E#y_account.account || E - mnesia:table(y_account), E#y_account.id 5]), qlc:e(Q) mnesia:transaction(F).
%%=============================================== %%   select * from y_account where id=5 %%=============================================== F = fun() - mnesia:read({y_account,5}) mnesia:transaction(F).
%%=============================================== %%   select * from y_account where account=xiaomin %%=============================================== F = fun() - MatchHead = #y_account{ id = _, account = "xiaomin", password = _ }, Guard = [], Result = [$_], mnesia:select(y_account, [{MatchHead, Guard, Result}]) mnesia:transaction(F).
%%=============================================== %%   select * from y_account order by id asc %%=============================================== %% 使用 qlc F = fun() - Q = qlc:q([E || E - mnesia:table(y_account)]), qlc:e(qlc:keysort(2, Q, [{order, ascending}])) mnesia:transaction(F). %% 使用 qlc 的第二种写法 F = fun() - Q = qlc:q([E || E - mnesia:table(y_account)]), Order = fun(A, B) - B#y_account.id A#y_account.id qlc:e(qlc:sort(Q, [{order, Order}])) mnesia:transaction(F).
%%=============================================== %%   select y_info.* from y_account join y_info on (y_account.id = y_info.id) %%      where y_account.account = xiaomin %%=============================================== %% 使用 qlc F = fun() - Q = qlc:q([Y || X - mnesia:table(y_account), X#y_account.account =:= "xiaomin", Y - mnesia:table(y_info), X#y_account.id =:= Y#y_info.id qlc:e(Q) mnesia:transaction(F).
注:使用qlc模块查询,需要在文件顶部声明“-include_lib("stdlib/include/qlc.hrl").”,否则编译时会产生“Warning: qlc:q/1 called, but "qlc.hrl" not included”的警告。    最新内容请见作者的GitHub页:http://qaseven.github.io/
FastAPI数据库系列(一) MySQL数据库操作 一、简介 FastAPI中你可以使用任何关系型数据库,可以通过SQLAlchemy将其轻松的适应于任何的数据库,比如: PostgreSQL MySQL SQLite Oracle Microsoft SQL Server
OushuDB 数据库基本用法(下) 一个数据库包含多个模式(schema),而一个模式可以包含多种命名对象,比如表,数据类型,函数,操作符等。同一个对象名字可以用在不同的模式中而不产生冲突。比如schema1中可以包含表test,schema2中也可以同时包含名字为test的表。从这个意义上,模式很像一个命名空间(namespace)。 当创建一个对象时,默认被放置在public模式中。下面是系统默认创建的schema。
OushuDB 数据库基本用法(中) 一个OushuDB集群管理着多个数据库(database),每个数据库又包含多个模式(schema), 一个模式包含多个对象(表,视图,函数等),所以这些对象之间的层级结构为: database - schema - (tables, functions, views) 每个模式,表,视图,函数等只属于一个database。本章主要介绍每一种对象的常见用法。具体使用语法可以参见参考手册。