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.mzph.cn/news/879257.shtml

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

相关文章

Beyond Homophily Reconstructing Structure for Graph-agnostic Clustering

发表于&#xff1a;ICML23 推荐指数&#xff1a; #paper/⭐ (个人不太喜欢他的行文方法&#xff0c;有部分内容有点让人看不懂) 总结&#xff1a;很常见的套路&#xff1a;构造同配视图异配视图&#xff0c;进行同配传播异配传播&#xff0c;然后利用类对比损失&#xff0c;类重…

【Linux】Linux 可重入函数

文章目录 Linux 可重入函数1. 什么是可重入函数&#xff1f;2. 可重入函数的特点3. Linux 中的可重入函数示例4. 如何编写可重入函数&#xff1f;5. 注意事项 Linux 可重入函数 在编写并发或多线程程序时&#xff0c;理解可重入函数的概念非常重要。可重入函数&#xff08;Ree…

dp+观察,CF 1864 D. Matrix Cascade

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/1864/D 二、解题报告 1、思路…

Python | Leetcode Python题解之第394题字符串解码

题目&#xff1a; 题解&#xff1a; class Solution:def decodeString(self, s: str) -> str:def dfs(s, i):res, multi "", 0while i < len(s):if 0 < s[i] < 9:multi multi * 10 int(s[i])elif s[i] [:i, tmp dfs(s, i 1)res multi * tmpmulti…

flex布局子元素设置字体大小导致对齐问题解决

原代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head&g…

AI应用 | 超好玩的“汉语新解“ - 文末有Prompt

最近群里玩“汉语新解”的文字卡片贼多 感觉很新颖 本来AI是无法生成固定的图的 但是使用html格式&#xff0c;来生成固定图片的想法还是很不错的 看看效果 使用很简单 把提示词喂给Ai即可 随便一个大模型都可以&#xff0c;比如ChatGPT、通义千问、kimi等等 提示词(Prompt)如下…

llama.cpp本地部署大模型

llama.cpp 是一个C库&#xff0c;用于简化LLM推理的设置&#xff0c;它使得在本地机器上运行大模型&#xff08;GGUF格式&#xff09;成为可能。 官网&#xff1a;https://github.com/ggerganov/llama.cpp 模型库&#xff1a; https://huggingface.co/ HF-Mirror 魔搭社区…

共享IP可以被清理为纯净IP吗?

在网络世界中&#xff0c;IP地址是连接各个网络设备的桥梁&#xff0c;它们扮演着至关重要的角色。共享IP&#xff0c;作为多用户共同使用的IP地址&#xff0c;因其经济性和便利性而广受欢迎。然而&#xff0c;随着网络环境的日益复杂&#xff0c;共享IP也带来了一系列问题&…

基于SpringBoot+Vue+MySQL的房屋租赁管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…

基于SpringBoot+Vue的超市外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

8.Bug流程管理,禅道的使用(包含笔试/面试题)

一、bug的生命周期&#xff08;重点&#xff09; bug的生命周期就是从bug被发现到bug被关闭的整个过程。 1.bug生命周期&#xff1a; 新建&#xff08;提交bug&#xff09; - 指派 - 已解决 - 待验 - 关闭 new&#xff08;新建&#xff09; - assign额的&…

Python语言开发学习之使用Python预测天气

什么是wttr&#xff1f; 使用Python预测天气的第一步&#xff0c;我们要了解wttr是什么。wttr.in是一个面向控制台的天气预报服务&#xff0c;它支持各种信息表示方法&#xff0c;如面向终端的ANSI序列(用于控制台HTTP客户端(curl、httpie或wget))、HTML(用于web浏览器)或PNG(…

SprinBoot+Vue在线考试系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

React实现虚拟列表的优秀库介绍

在 React 中&#xff0c;有一些优秀的库可以帮助你实现高效的虚拟列表渲染。以下是几个常用的库&#xff1a; 1. react-window react-window 是一个轻量级的虚拟列表库&#xff0c;适用于大多数虚拟列表需求。它提供了简单易用的 API 和良好的性能。 安装 npm install reac…

Rabbitmq中得RPC调用代码详解

文章目录 1.RPC客户端2.RabbitMQ连接信息实体类3.XML工具类 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都是在得 直接上代码了 1.RPC客户端 …

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

【算法】链表相关

【ps】本篇有 5 道 leetcode OJ。 一、算法简介 链表是一种常见的线性数据结构&#xff0c;是一种在物理结构上非连续、非顺序的存储结构&#xff0c;其中的数据元素的逻辑顺序由其中的指针链接次序实现&#xff0c;指针链接的每一个结构体都是一个节点。 链表的结构多种多样&…

linux kernel 6.x 用户态地址空间探究

最近做个项目需要研究用户态虚拟地址划分情况&#xff0c;找到多个app的共有未使用区间。偶然发现6.1.49和6.8的kernel用户态虚拟地址划分似乎有些不一样。下面使用数据进行分析。 大家都知道linux应用空间的地址划分是&#xff1a; stack高地址开始&#xff0c;向下生长。mm…

换脸动漫转真人:ComfyUI无实物Cosplay

在数字艺术领域&#xff0c;将动漫角色转换为真人形象一直是艺术家的追求。现在&#xff0c;ComfyUI推出了无实物Cosplay功能&#xff0c;让你轻松实现换脸动漫转真人&#xff0c;开启你的二次元冒险之旅&#xff01; ComfyUI无实物Cosplay&#xff1a;换脸动漫转真人&#xf…

代码静态分析工具

静态分析工具&#xff08;如 Coverity、Lint&#xff09;&#xff0c;如果代码工程大常用的工具是啥&#xff0c;原理是啥&#xff1f; 常用的静态分析工具&#xff1a; Coverity&#xff1a;一种商用静态分析工具&#xff0c;广泛用于C、C、Java等语言的代码分析。它能够发现…