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。本章主要介绍每一种对象的常见用法。具体使用语法可以参见参考手册。
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。本章主要介绍每一种对象的常见用法。具体使用语法可以参见参考手册。
相关文章
- 查询Postgres数据库中每个表的数据量大小
- 数据库学习笔记3 基本的查询流 2 select lastname+','+firstname as fullname order by lastname+','+firstname len() left() stuff() percent , select top(3) with ties
- MySQL 数据库的导入 导出
- Oracle数据库经常使用经典查询
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
- 实战演练 | Navicat Premium 轻松连接阿里云云数据库
- CSDN日报190912:前端、架构、数据库、游戏开发纯干货分享
- 数据库数据处理性能提升技术
- 《七周七数据库》一一2.2 第1天:关系、CRUD和联接
- Oracle数据库上云利器 阿里云发布数据库迁移服务ADAM
- MySQL数据库索引的底层原理(二叉树、平衡二叉树、B-Tree、B+Tree)
- nosql:文件存储和sql数据库存储形式之外的存储系统都是nosql
- oracle数据库查询全系整理
- Oracle数据库之多表查询一
- Java_jdbc 基础笔记之七 数据库连接(方法升级)
- 实践真知:使用ASM和文件系统的数据库在AIO上有何不同?
- 墨菲定律:一个参数Drop_caches导致集群数据库实例崩溃
- 数据库:查询结果中增加数据库不存在的字段的方法
- Microsoft Jet 数据库引擎找不到输入表或查询. 确定它是否存在如何解决
- SQL Server还原数据库操作详细步骤
- adb命令具体解释(二)——手机缺失sqlite3时操作数据库的多种解决方式
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
- 三国武将查询系统 //Java 訪问 数据库
- sqlserver数据库删除约束
- 数据库查询之子查询
- 数据库查询之自关联