【Erlang新手成长日记】Mnesia数据库CRUD操作
初始化工作:
1、(可选)启动Erlang时,设置根目录的位置:
erl -mnesia dir Dir
用你要存储schema的目录来代替Dir。
示例:
erl -mnesia dir '"db"'
2、建立schema:
mnesia:create_schema(DiscNodes) -> ok | {error, Reason}
官方文档:http://www.erlang.org/doc/man/mnesia.html#create_schema-1
关于schema的更多细节,参考《Erlang Programming》第295页 Configuring Mnesia
注:创建数据库时,建立schema操作,仅需要执行一次。
3、启动数据库
mnesia:start() -> ok | {error, Reason}
创建表:
1、声明record
Mnesia数据库表,包含Erlang的record。通常情况,record类型名就是表名。
示例:
-record(users, {username, password}).
声明record,用于创建表“users”,存储用户名“”和密码“password”。
2、创建表
mnesia:create_table(Name, TabDef) -> {atomic, ok} | {aborted, Reason}
该函数根据TabDef创建一个名为Name的表。Name为record类型,TabDef为一个元组列表,格式为{Key, Value}。
更多细节,参考官方文档:http://www.erlang.org/doc/man/mnesia.html#create_table-2
示例:
mnesia:create_table(users, [{attributes, record_info(fields, users)}]).
C:
使用事务,在数据表中添加一条数据项:
c(Id, Username, Password) -> User = #users{id = Id, username = Username, password = Password}, Fun = fun() -> mnesia:write(User) end, mnesia:transaction(Fun).
R:
使用事务,查询数据表:
r(Id) -> Fun = fun() -> qlc:e(qlc:q([User || User <- mnesia:table(users), User#users.id =:= Id])) end, mnesia:transaction(Fun).
注:使用qlc模块查询,需要在文件顶部声明“-include_lib("stdlib/include/qlc.hrl").”,否则编译时会产生“Warning: qlc:q/1 called, but "qlc.hrl" not included”的警告。
U:
记录的第一个属性为主键。
数据表的默认类型是“set”。在一个集合(set)里,所有的记录有唯一的键,在一个包(bag)里,几条数据可能有相同的键,但是记录的内容是唯一的。
如果一个不唯一的数据被存储到原有的表中,冲突的记录会被简单的覆盖 。
D:
使用事务,删除数据项:
d(Id) -> Fun = fun() -> mnesia:delete({users, Id}) end, mnesia:transaction(Fun).
脏操作:
1、速度大约10倍快于事务操作;
2、偶尔脏读,避免脏写。
可视化工具:
Erlang自带一个可以看Mnesia和ETS表查看器,使用tv:start()启动。
iOS 开发讨论群:82873648

本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
博客园博客已停止更新,博客地址:dyingbleed.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?