当前位置: 首页 > news >正文

erlang学习: Mnesia Erlang数据库3

Mnesia数据库删除实现和事务处理

-module(test_mnesia).
-include_lib("stdlib/include/qlc.hrl").-record(shop, {item, quantity, cost}).
%% API
-export([insert/3, select/0, select/1, delete/1, transaction/1,start/0, do_this_once/0]).
start() ->mnesia:start().insert(Name, Quantity, Cost) ->Row = #shop{item = Name, quantity = Quantity, cost = Cost},io:format("insert ~p~n", [Row]),F = fun() ->mnesia:write(Row)end,mnesia:transaction(F).delete(Item) ->Oid = {shop, Item},io:format("delete ~p~n", [Oid]),F = fun() ->mnesia:delete(Oid)end,mnesia:transaction(F).select() ->do(qlc:q([X || X <- mnesia:table(shop)])).
select(Num) ->do(qlc:q([X || X <- mnesia:table(shop), X#shop.quantity =< Num])).
%%事务函数
transaction(Num) ->F = fun() ->[Apple] = mnesia:read({shop, apple}),NApple = Apple#shop.quantity,Apple1 = Apple#shop{quantity = NApple + Num},mnesia:write(Apple1),[Orange] = mnesia:read({shop, orange}),NOrange = Orange#shop.quantity,ifNOrange >= Num ->N1 = NOrange - Num,Orange1 = Orange#shop{quantity = N1},mnesia:write(Orange1);true ->mnesia:abort(oranges)endend,mnesia:transaction(F).
do(Q) ->F = fun() ->qlc:e(Q)end,{atomic, Val} = mnesia:transaction(F),Val.do_this_once() ->mnesia:create_schema([node()]),mnesia:start(),mnesia:create_table(shop, [{attributes, record_info(fields, shop)}]),mnesia:stop().

删除功能实现

开始有pear后删除就没有pear了
请添加图片描述

事务功能实现

事务是一个整体,里面方法对数据库的操作要么同时操作完毕,要么都不操作

我的事务函数中输入数据,将苹果增加改数量,橘子减少该数量
开始操作成功,数据正确
后面橘子数量不足,因此苹果的改动也没有完成,数据正确
请添加图片描述

http://www.lryc.cn/news/436229.html

相关文章:

  • 善于善行——贵金属回收
  • 用CSS 方式设置 table 样式
  • Elasticsearch7.x 集群迁移文档
  • 高空抛物检测算法的应用场景解析
  • Leetcode 无重复字符的最长子串
  • 用命令行的方式启动.netcore webapi
  • Spring6详细学习笔记(IOC+AOP)
  • @RequestMapping 基于哪个库进行通信
  • GPIO(General Purpose Input/Output)输入/输出
  • 两个pdf合并成一个pdf,这些pdf合并小技巧了解下
  • Transformer学习(2):自注意力机制
  • 分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序
  • 【React】Vite 构建 React
  • 算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 【linux】一种基于虚拟串口的方式使两个应用通讯
  • 并行程序设计基础——并行I/O(3)
  • 性能测试-jmeter脚本录制(十五)
  • 关系型数据库 - MySQL I
  • 解锁AI写作新境界:5款工具让你的论文创作事半功倍
  • 一文读懂多组学联合分析产品在医学领域的应用
  • js react 笔记 2
  • 快速使用react 全局状态管理工具--redux
  • 活动系统开发之采用设计模式与非设计模式的区别-非设计模式
  • JVM面试(六)垃圾收集器
  • 固态硬盘装系统有必要分区吗?
  • 网络安全架构师
  • 如何本地部署Ganache并使用内网穿透配置公网地址远程连接测试网络
  • 算法岗/开发岗 实况
  • Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)
  • 【数据分析预备】Pandas