erlang学习: Mnesia Erlang数据库3

news2024/9/23 18:51:18

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,
          if
            NOrange >= Num ->
              N1 = NOrange - Num,
              Orange1 = Orange#shop{quantity = N1},
              mnesia:write(Orange1);
            true ->
              mnesia:abort(oranges)
          end
      end,
  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.coloradmin.cn/o/2126458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SAP ABAP] 清空ABAP变量

使用关键字CLEAR将变量中的值设置为默认值 代码结果如下所示

Win10磁盘出现小锁和感叹号的解决办法

很多说在设置-系统安全&#xff0c;但是我的么有&#xff0c;只能上命令了&#xff0c;管理员身份运行powerShell: su 速度比较慢&#xff0c;耐心等待会&#xff0c;每次查看状态加密的百分比都是减少哦 manage-bde -off G: manage-bde -status

JS获取URL参数的几种方法

JS获取URL参数的几种方法 在Web开发中&#xff0c;经常需要从URL中提取参数来进行相应的操作。本文将深度解析在JavaScript中获取URL参数的几种方法&#xff0c;并附带一些扩展与高级技巧。希望对你有所帮助&#xff01; 一、JS获取URL参数包含哪些方式 1. 使用URL对象 现代浏览…

BCLinux您的授权码是无效的,请获得正确的授权码来注册大云Linux操作系统

更新yum源老弹出这个&#xff0c;很烦人。 [rootlocalhost yum.repos.d]# yum clean all 服务器检查结果: ***信息***您的授权码是无效的&#xff0c;请获得正确的授权码来注册大云Linux操作系统。您可以使用bclinux-license -g命令获得机器码&#xff0c;然后与我们联系帮您产…

JavaScript语言基础知识

文章目录 前言一、JavaScript语言是什么&#xff1f;二、基础知识 1.语法2.关键字3.数据类型4.变量定义及其使用5.运算符的使用总结 前言 JavaScript是Web页面中一种比较流行的脚本语言&#xff0c;它通过客户端浏览器解释执行&#xff0c;可以应用在JSP、PHP、ASP等网站中。随…

编码与实现

1. 程序设计语言 1.1 程序设计语言的概述 程序设计语言是用于书写计算机程序的语言&#xff0c;是一种实现性软件语言。最早的机器语言&#xff0c;到汇编语言&#xff0c;到现在的高级语言。语言的发展越来越规范、简单&#xff0c;代码的复用性越来越高。程序员逐渐从复杂的…

curl和ping

curl获取页面内容&#xff0c;ping测试连通 curl和ping是两个在网络环境中常用的命令行工具&#xff0c;但它们的目的和应用场景有很大的不同。 curl 用途&#xff1a;curl是一个命令行工具&#xff0c;用于传输数据&#xff0c;支持多种协议&#xff0c;包括HTTP、HTTPS、FT…

KaiwuDB 受邀亮相 2024 数博会

8月28-30日&#xff0c;由国家数据局主办&#xff0c;贵州省人民政府承办的 2024 中国国际大数据产业博览会&#xff08;简称“数博会”&#xff09;在贵阳启幕。KaiwuDB 受邀携一众产品亮相大会&#xff0c;重点展示了分布式多模数据库 KaiwuDB 2.0 及其在物联网海量异构数据管…

比较stl库的ostringstream与Qt的QString::arg(),QString::number()

需求&#xff1a; 显示一个float或者double类型的数&#xff0c;要求小数点后的数字位数为定值。 考虑STL库的ostringstream或者Qt的QString::arg(), number 对于stringstream,使用比较繁琐&#xff0c;要联合使用std::fixed和std::setprecision才能实现固定小数位数显示&am…

Java并发复习

Java基础 1. 为什么要使用并发编程&#xff1f; 一般我们工作的电脑都有多核&#xff0c;我们创建多个线程&#xff0c;然后操作系统可以将多个线程分配给不同的CPU去执行&#xff0c;每个CPU执行一个线程&#xff0c;这样就提高了CPU使用效率。 在网络购物中&#xff0c;我…

52. 两个链表的第一个公共节点

comments: true difficulty: 简单 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9852.%20%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%E8%8A%82%E7%82%B9/README.md 面试题 52. 两…

逆向基础一阶段检测-2

做题笔记。 前言&#xff1a;只能说&#xff0c;在目前我所打的CTF-reverse&#xff0c;这类题目&#xff0c;第一印象就是它啦。 考查&#xff1a;对混淆代码的识别、反反调试的手段。 下载 查壳。 32ida打开。 还是先用动调的方式去执行。 会发现 程序直接闪退。 切换到汇编窗…

【编译原理】词法分析(编译器、转移图、正则表达式)

#词法分析 目录 编译器的阶段前端 转移图标识符的转移图关键字表算法正则表达式自动生成什么是正则表达式语法糖有限状态自动机&#xff08;FA&#xff09;小结 编译器的阶段 源程序→前端→中间表示→后端→目标程序 前端 其中词法分析器的作用&#xff1a; 字符流到单词流…

【CanMV K230 AI视觉】 人体关键点检测

【CanMV K230 AI视觉】 人体关键点检测 人体关键点检测 动态测试效果可以去下面网站自己看。 B站视频链接&#xff1a;已做成合集 抖音链接&#xff1a;已做成合集 人体关键点检测 人体关键点检测是指标注出人体关节等关键信息&#xff0c;分析人体姿态、运动轨迹、动作角度等…

Vue常见面试题目

computed与watch区别 computed&#xff08;计算属性&#xff09;watch&#xff08;侦听器&#xff09;定义与用途计算属性&#xff08;computed&#xff09;用于声明式地描述一些依赖响应式属性的计算值。当依赖的响应式属性值发生变化时&#xff0c;计算属性会重新求值。侦听…

【深度学习】Pytorch基础

目录 梯度下降算法&#xff08;Gradient Descent&#xff09;代码实现 梯度下降算法&#xff08;Gradient Descent&#xff09; 梯度下降算法在机器学习中应用十分的广泛&#xff0c;不论是在线性回归还是Logistic回归中&#xff0c;它的主要目的是通过迭代找到目标函数的最小…

[网络]TCP/IP协议 之 网络层IP协议(3)

文章目录 网络层IP协议NAT机制 网络层 网络层主要做的事情: 1.路径规划(路由器选择) 2.地址管理 IP协议 1)4位版本 指定IP协议的版本, 4 > ipv4 , 6 > ipv6 2)4位首部长度 4位bit能表示0-15, 单位也是4字节, 所以IP报头最长60字节, 最短20字节 3)8位服务类型(TOS) ty…

【Qt】Qt界面美化 | 绘画

文章目录 绘画概述绘制API1. 图形(1). 线段(2). 矩形(3). 圆形(4). 绘制文本 2. 工具(1). 画笔(2). 画刷 3. 绘制图片QPainter图片操作 绘图设备(1). QPixmap(2). QImage(3). QPicture 结束语 绘画概述 虽然 Qt 已经内置了很多的控件&#xff0c;但还是有很多时候需要“自定义…

源于AI绘画的爆火,尝试做了一个工具网站

这两天做了一个 网页 Demo&#xff0c;实现了一些 AI 图像处理功能&#xff0c;前端用的是 React&#xff0c;后端用的是 Django 现在 &#xff0c;Demo 中已经实现的功能有两个&#xff1a; 1&#xff0c;人像分割&#xff1a;从图像中把人物分割出来&#xff0c;用一个透明…

Vue与React的Diff算法

虚拟DOM 定义 虚拟DOM是一种用于在前端开发中模拟真实DOM的技术。它是一种抽象的数据结构&#xff08;简单来说就是一个Javascript对象&#xff09;&#xff0c;用于描述HTML或XML文档的结构和内容。通过将页面的状态和结构保存在内存中&#xff0c;而不是直接操作真实的DOM&am…