数据库 – Erlang:Mnesia:连续更新单个字段值
发布时间:2020-05-24 10:02:07 所属栏目:MsSql 来源:互联网
导读:我有一个mnesia表,有三个字段,i,a和b,使用记录创建 -record(rec, {i, a,b}). 现在我在表中插入一行: mnesia:transaction( fun() - mnesia:write(T, #rec{i=1, a=2, b=3}, write) end ). 现在,如果我想要更新此行,并且仅将a的值更改为10,同时将i和b保留为相同
|
我有一个mnesia表,有三个字段,i,a和b,使用记录创建 -record(rec,{i,a,b}).
现在我在表中插入一行: mnesia:transaction( fun() -> mnesia:write("T",#rec{i=1,a=2,b=3},write) end ).
现在,如果我想要更新此行,并且仅将a的值更改为10,同时将i和b保留为相同的值,我该怎么办?是否有任何SQL等价的“UPDATE T SET a = 10 WHERE i = 1”? 如果我做这样的事情: mnesia:transaction( fun() -> mnesia:write("T",a=10},write) end )
该行存储为: {rec,1,10,undefined}
解决方法如果在mnesia:transaction中使用,则此函数的值将更新update_a(Tab,Key,Value) ->
fun() ->
[P] = mnesia:wread({Tab,Key}),mnesia:write(P#pixel{a=Value})
end.
建议:如果你想要一些更像SQL语法的语法糖,请查看QLC. 性能当然是最佳基准测试,但QLC有开销,我不确定它们与其他细节相比是否相关.我只是想你所提供的SQL示例将更新所有i = 1的记录.使用QLC提取该组记录比mnesia调用更漂亮. 另外要注意,wread直接声明对记录的写锁定,因为我们提前知道我们将更新该记录.这是一个微优化,以避免首先读取锁定,然后改变主意并获得写锁定.我在很长一段时间内没有对此进行基准测试. 如果性能仍然存在问题,您应该查看使用脏操作的各种方法.但是你真的应该试着找出你需要的每秒交易次数,以便“足够快”. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)
- SQL Server SQL 判断给定日期值(或时间段)所在星期的星期一
- SQL Server SQL高级查询语句小结
- sql – 如何使用ADO查询参数指定表和字段名称?
- MySQL中distinct和count(*)的使用方法比较
- CentOS6.5下RPM方式安装mysql5.6.33的详细教程
- sql-server – 获取上次成功运行的日期?
- sql – 为什么在本地服务器上使用OPENQUERY不好?
- sql-server – Biztalk Adapter Pack安装 – 没有看到WCF-S
- mysql source 命令导入大的sql文件的方法
