当前位置: 首页 > 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了
请添加图片描述

事务功能实现

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

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

相关文章:

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() ->mnes…...

善于善行——贵金属回收

在当今社会&#xff0c;贵金属回收已成为一项日益重要的产业。随 着科技的不断进步和人们对资源可持续利用的认识逐渐提高&#xff0c;贵金属回收的现状也备受关注。 目前&#xff0c;贵金属回收市场呈现出蓬勃发展的态势。一方面&#xff0c;贵金属如金、银、铂、钯等在众多领…...

用CSS 方式设置 table 样式

在现代Web开发中&#xff0c;使用CSS来设置table的样式是一种常见且强大的方法&#xff0c;它能让你的表格数据既美观又易于阅读。下面我将通过一个示例来展示如何使用现代CSS技巧来美化表格。 效果图 HTML 结构 首先&#xff0c;我们定义一个基本的HTML表格结构&#xff1a;…...

Elasticsearch7.x 集群迁移文档

一、集群样例信息 集群名称&#xff1a;escluster-ali-test 1、源集群:&#xff08;source_cluster&#xff09; 节点IP节点名称节点角色是否为master节点10.200.112.149es2.gj1.china-job.cndata,master是10.200.112.151es1.gj1.china-job.cndata,master否10.200.112.153es…...

高空抛物检测算法的应用场景解析

高空抛物事件频发&#xff0c;对公众安全构成严重威胁。无论是居民区还是商业中心&#xff0c;从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主&#xff0c;无法在事发时及时预警和干预。为应对这一难题&#xff0c;视觉分析技术的发展为高…...

Leetcode 无重复字符的最长子串

算法思想&#xff1a; 滑动窗口&#xff1a;通过 start 和 end 来维护一个滑动窗口&#xff0c;start 指向当前窗口的起点&#xff0c;end 是当前窗口的末尾。滑动窗口中的字符都是无重复的。哈希表 charIndexMap&#xff1a;用于存储每个字符及其最近一次出现的位置。更新起始…...

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹&#xff0c;比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”&#xff0c;打开命令提示符&#xff0c;进入到发布代码目录 命令行启动.netcore项目的命令为: dotnet 项目启动文件.dll --urls"ht…...

Spring6详细学习笔记(IOC+AOP)

一、Spring系统架构介绍 1.1、定义 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&#xff08;框架&#xff09;。Spring官网 Spring是一款主流的Java EE 轻量级开源框架&#xff0c;目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦…...

@RequestMapping 基于哪个库进行通信

RequestMapping 是 Spring Framework 中用于处理 HTTP 请求的注解&#xff0c;主要用于定义控制器方法的请求映射。它并不直接基于某个特定的通信库&#xff0c;而是依赖于 Spring MVC 框架的核心功能。 1. Spring MVC RequestMapping 是 Spring MVC 的一部分&#xff0c;Spr…...

GPIO(General Purpose Input/Output)输入/输出

GPIO最简单的功能是输出高低电平&#xff1b;GPIO还可以被设置为输入功能&#xff0c;用于读取按键等输入信号&#xff1b;也可以将GPIO复用成芯片上的其他外设的控制引脚。 STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH&#xff0c;除了GPIOH只有两个IO&#xff0c;其余每组IO有…...

两个pdf合并成一个pdf,这些pdf合并小技巧了解下

在日常工作和学习中&#xff0c;我们经常会遇到需要将多个PDF文件合并成一个文件的情况。这不仅可以提高文件管理的效率&#xff0c;还能让信息展示更加集中和便捷。今天就来给大家分享几种非常简单便捷的PDF合并小技巧&#xff0c;一起来学习下吧。 方法一&#xff1a;WPS WP…...

Transformer学习(2):自注意力机制

回顾 注意力机制 自注意力机制 自注意力机制中同样包含QKV&#xff0c;但它们是同源(Q≈K≈V)&#xff0c;也就是来自相同的输入数据X&#xff0c;X可以分为 ( x 1 , x 2 , . . , x n ) (x_1,x_2,..,x_n) (x1​,x2​,..,xn​)。 而通过输入嵌入层(input embedding)&#xff0c…...

分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序

分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序 文章目录 一、基本原理1. 粒子群优化算法&#xff08;PSO&#xff09;2. 径向基神经网络&#xff08;RBF&#xff09;PSO-RBF模型流程总结 二、实验结果三、核心代码…...

【React】Vite 构建 React

项目搭建 vite 官网&#xff1a;Vite 跟着文档走即可&#xff0c;选择 react &#xff0c;然后 ts swc。 着重说一下 package-lock.json 这个文件有两个作用&#xff1a; 锁版本号&#xff08;保证项目在不同人手里安装的依赖都是相同的&#xff0c;解决版本冲突的问题&am…...

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…...

【linux】一种基于虚拟串口的方式使两个应用通讯

在Linux系统中&#xff0c;两个应用之间通过串口&#xff08;Serial Port&#xff09;进行通信是一种常见的通信方式&#xff0c;特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南&#xff0c;说明如何在Linux中…...

并行程序设计基础——并行I/O(3)

目录 一、多视口的并行文件并行读写 1、文件视口与指针 1.1 MPI_FILE_SET_VIEW 1.2 MPI_FILE_GET_VIEW 1.3 MPI_FILE_SEEK 1.4 MPI_FILE_GET_POSTION 1.5 MPI_FILE_GET_BYTE_OFFSET 2、阻塞方式的视口读写 2.1 MPI_FILE_READ 2.2 MPI_FILE_WRITE 2.3 MPI_FILE_READ_…...

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制&#xff08;不推荐&#xff09;简介&#xff1a; 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前&#xff0c;修改提示文字...

关系型数据库 - MySQL I

MySQL 数据库 MySQL 是一种关系型数据库。开源免费&#xff0c;并且方便扩展。在 Java 开发中常用于保存和管理数据。默认端口号 3306。 MySQL 数据库主要分为 Server 和存储引擎两部分&#xff0c;现在最常用的存储引擎是 InnoDB。 指令执行过程 MySQL 数据库接收到用户指令…...

解锁AI写作新境界:5款工具让你的论文创作事半功倍

在这个数字化飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的幻想&#xff0c;而是实实在在地融入了我们的日常生活。特别是在学术领域&#xff0c;AI技术的介入正在改变传统的论文写作方式。你是否还在为撰写论文而熬夜苦战&#xff1f;…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...