
```erlang
查询
mnesia:add_table_index( test, name).
mnesia:del_table_index( test, name).
mnesia:index_read(Table, Arg, Attr).
建表时,为该表建立索引使用元组{index, [attr1, attr2,....}
mnesia:index_match_object( alias, Pattern, #alias.alias_name, read ).
fun() -> mnesia:write( New ) end
fun() -> mnesia:read( { table, Id } ) end
fun() -> mnesia:delete( {product, Id} ) end
fun() -> [R] = mnesia:read( table, Id, write ),
New = R#table{ Id = Ids },
mnesia:write( New )
end. 先做读取操作,参数write为下面的mnesia:write做准备
do:q
-include_lib( "stdlib/include/qlc.hrl" ).
select(StringBin )->
Fun = fun( Key ) -> binary:match( Key, StringBin ) =/= nomatch end,
do( qlc:q([ UUID||#test_select{key= UUID} <- mnesia:table( test_select ), Fun(UUID)]) ).
do( Q ) ->
F = fun() -> qlc:e( Q ) end,
mnesia:transaction( F ).
指定的选项为 {lock, Lock} 、{n_objects,Integer} 和{ traverse, SelMethod}
lock 选项指定 Mnesia 是否应该请求一个读或写锁,
n_objects 指定在每个部分(chunk)应该返回多少结果给 QLC。
traverse,其指定哪一个函数 mnesia 应该用来遍历表,默认用 select。
但对 mnesia:table/2 使用{traverse, {select,MatchSpecification}}作为选项用户能够指定属于自己的表视图
mnesia:table( Tab, [{n_objects,100}, {lock,read},{traverse, select}] ).
如果没有指定选项,默认将会请求一个读锁,每部分返回 100 个结果,select 被用于遍历表
mnesia:delete_table(Tab)
mnesia:dirty_all_keys(Tab)
mnesia:clear_table(Tab).
mnesia:all_keys( table ).
mnesia:select/2, /4
mnesia:select(wordItem, [{ {'$0','$1','$2','$3'}, [{'==','$1', Id}], ['$$'] }], Len, read).
{Res, Cout} = mnesia:select(test, [{'$1', [], ['$1']}], 5000, read|write).
{Res1, Cout1} = mnesia:select(Cout).
mnesia:select(test, [{ #test{id='$1',name=Name, _ = '_' }, [], ['$1'] }]).
mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]).
MatchHead = #person{name='$1', sex=male, age='$2', _='_'},
Guard = {'>', '$2', 30}, $2中所有大于30的记录
Result = '$1', 选出匹配记录的name字段
ets:fun2ms( fun( #test_select{key= Key} )
when ( Key >= StrBin) andalso ( Key =< << StrBin/binary, 255>>) -> Key end ),
mnesia: match_object ( Record )
mnesia:delete_object(Record)
mnesia:match_object(person, #person{ id = 36, _ = '_'}, read)
mnesia:match_object(person, {'_', 36, '_'},read)
mnesia:dirty_slot(Tab, N).
返回第N块数据
mnesia:dirty_update_counter(Table, Key, 1).
1.创建如下结构的mnesia数据库表-record(unique_id, {item, uid});
2.每为feature表加入一条新记录时,需要得到新的id值:
mnesia:dirty_update_counter(unique_id, feature, 1),
注意:请在建立unique_id表的时候,往里面插入数据,表名,初始值,{feature,0}
mnesia:foldl(Fun, Acc0, Tab)
mnesia:foldr(Fun, Acc0, Tab)
mnesia:foldl(Fun, Acc0, Tab, LockType)
mnesia:foldr(Fun, Acc0, Tab, LockType)
LockType 默认是读锁, 如果在迭代时写入或删除记录,那么就应该请求写锁
mnesia:first(Tab) -> Key | transaction abort
mnesia:last(Tab) -> Key | transaction abort
mnesia:next(Tab,Key) -> Key | transaction abort
mnesia:prev(Tab,Key) -> Key | transaction abort
mnesia:snmp_get_next_index(Tab,Index) -> {ok, NextIndex} | endOfTable
mnesia:write_lock_table/1
```
- 1.学习
- 1.1安装与运行环境
- 1.2编辑器、集成开发环境与其它工具
- 1.3代码编译运行
- 2.基础
- 2.1 Erlang终端
- 2.2 基础语法
- 2.2.1 异常处理
- 2.3 数据类型
- 2.4 操作符
- 2.5 模块属性
- 3.库函数
- 3.1 常用模块
- 3.2 OTP模块
- 3.2.1 函数
- 3.2.2 receive
- 3.2.3 .app.src文件
- 3.2.4 _app.erl
- 3.2.5 _sup.erl
- 3.2.6 gen_server
- 3.2.7 gen_fsm
- 3.3 erts
- 3.3.1 init
- 3.3.2 BIF
- 3.3.3 NIF
- 3.4 kernel
- 3.4.1 code_server
- 3.4.2 inet
- 3.4.3 net_kernel
- 3.4.4 net_adm
- 3.4.5 error_logger
- 3.4.6 global
- 3.4.7 application
- 3.5 stdlib
- 3.5.2 array
- 3.5.4 base64
- 3.5.5 binary
- 3.5.6 c
- 3.5.8 calendar
- 3.5.9 code
- 3.5.11 dict
- 3.5.12 erl_
- 3.5.13 file
- 3.5.14 filelib
- 3.5.15 gb_trees
- 3.5.16 gb_sets
- 3.5.17 gen_tcp
- 3.5.18 gen_server
- 3.5.19 httpc
- 3.5.20 init_parse
- 3.5.21 init
- 3.5.22 inet
- 3.5.23 io
- 3.5.24 lists
- 3.5.25 maps
- 3.5.26 os
- 3.5.27 ordsets
- 3.5.28 proplists
- 3.5.29 queue
- 3.5.30 qlc
- 3.5.31 re
- 3.5.32 random
- 3.5.33 rfc4627-json
- 3.5.34 string
- 3.5.35 ssh
- 3.5.36 soft
- 3.5.37 sets
- 3.5.38 supervisor
- 3.5.39 tuple
- 3.5.40 timer
- 3.5.41 unicode
- 3.5.42 cpu
- 3.5.43 math
- 3.5.44 zip
- 3.5.45 shell
- 3.6 SASL
- 3.7 asn1
- 3.8 compiler
- 3.9 tools
- 3.10 OS_Mon
- 3.11 crypto
- 3.12 Port
- 4.工具
- 4.1 Erlang预处理器
- 4.2 Erlang节点
- 4.3 Erlang多节点
- 4.3.1主从节点
- 4.4 Epmd
- 4.5 断点工具
- 4.6 dialyzer
- 4.7 dbg-debug 模块
- 4.7.1 dbg
- 4.8 Erlang跟踪工具
- 4.9 etop
- 4.10 profiling
- 4.10.1 fprof
- 4.10.2 eprof
- 4.10.3 cprof
- 5.进阶
- 5.1 TCP粘包、大小端
- 5.2 rebar发布系统
- 5.3 ErlangVM 心跳
- 5.4 Erlang GC
- 5.5 Erlang Time
- 5.6 Erlang 启动
- 5.6.1 SASL配置
- 5.7 Erlang系统限制
- 6.项目
- 6.1 the_seed
- 6.2 network
- 6.3 parse_tool
- 6.4 cache
- 7.项目研究
- 7.1 Mnesia
- 7.1.1 Mnesia模式
- 7.1.2 Mnesia操作
- 7.1.3 Mnesia增删改查
- 7.1.4 Mnesia过载分析
- 7.1.5 Mnesia高级特性
- 7.1.6 分布式
- 7.1.7 Mnesia表分片
- 7.1.8 Mnesia锁
- 7.1.9 dets
- 7.1.10 ets
- 7.2 Ejabberd
- 7.2.1 mod_echo.erl
- 7.2.2 hooks for module developers
- 7.2.3 Events list
- 7.3 cowboy
- 7.4 rebar
- 7.4.1 rebar Wiki
- 7.4.2 rebar.config.script
- 7.5 RIAK CS
- 7.6 Leofs
- 7.6.1 简介
- 8.资料整理
- 8.1 资料
- 8.1.1 Erlang的调度原理
- 8.1.2 虚拟机代码执行原理
- 8.1.3 SMP
- 8.2 杂记
- 8.2.1 设计