首頁 資料庫 mysql教程 Mnesia数据库操作整理(1)

Mnesia数据库操作整理(1)

Jun 07, 2016 pm 03:42 PM
操作 資料庫 整理

Mnesia数据库的操作和以前习惯的SQL数据库操作几乎完全不同,刚开始用很不使用。现将常见的读写操作整理于下: 1、脏读 mnesia:dirty_read(Tab,Key)-ValueList | exit({aborted,Reason}) 示例: 对于set类型的表,这个操作返回一个或者空表,因为set类型表键

Mnesia数据库的操作和以前习惯的SQL数据库操作几乎完全不同,刚开始用很不使用。现将常见的读写操作整理于下:

1、脏读

mnesia:dirty_read(Tab,Key)->ValueList | exit({aborted,Reason})

示例:

Mnesia数据库操作整理(1)


对于set类型的表,这个操作返回一个值或者空表,因为set类型表键值不可重复。如果对bag类型(键值可重复,但不能同键又同值)用脏读,结果是一个或若干值的列表,一个值都没有就是个空表。

示例:

Mnesia数据库操作整理(1)


2、脏写

mnesia:dirty_write(Tab,Record) -> ok | exit({abouted,Reason})

示例:

Mnesia数据库操作整理(1)


3、读read

这个操作,只能用在事务中,所以也不能直接在shell里使用。

示例:

Mnesia数据库操作整理(1)


4、写write

同上,普通的写操作也必须在事务中完成,否则会报错。

示例:

Mnesia数据库操作整理(1)


小结:read和write都是用于事务的,在不使用事务的时候,直接用dirty_read和dirty_write。

另,以上2种读操作都是按照主键进行查询。


5、使用带匹配规范的mnesia:select

Mnesia数据库操作整理(1)

Mnesia数据库操作整理(1)

这个命令也必须放到事务中才能执行。第一个参数是要查询的表,第二个参数是匹配规范。是个{Head,Conditions,Results}格式的三元组。

Head是个Erlang项式,用于描述查询模式,其中的'$1','$2'等原子用于表示变量,其对应于记录中第一个、第二个字段,以此类推。


‘_’(仅仅限于在Head部分使用),表示无所谓,任意值都可以匹配,示例:

Mnesia数据库操作整理(1)


'$$'(仅仅限于Results和Conditions中使用),等价于罗列出依次在Head部分匹配的所有变量'$1','$1','$1'等,示例参见上图。这个主要用于我们只对查询结果的部分字段感兴趣的时候用,不需要把整条记录都选择出来。


'$_'(仅仅限于Results和Conditions中使用),表示与查询条件相匹配的整条记录,示例:

Mnesia数据库操作整理(1)


6、使用查询列表速构(QLC)

QLC的全称是Query List Comprehension。表面看,它类似于普通的列表速构,使用时,又必须嵌套于外观类似于函数调用的qlc:q()中使用。实际上外层的qlc:q(...)只是一个标记,用于让编译器区别对待其中的表达式。要启用该功能,模块源码中必须加上下面这一行:

-include_lib("stdlib/include/qlc.hrl").

但作为特例,可以直接在Erlang shell中使用qlc:q(...)。也可以在事务中使用QLC,任何可以在事务中使用的Mnesia函数都可以与QLC混合使用。


示例:

Mnesia数据库操作整理(1)

上图是仅仅获取users表中的acc字段。


Mnesia数据库操作整理(1)

这是获取users表中的整条记录。


有关QLC的更多复杂用法,可以参见Erlang之父Joe Armstrong的新作《Programming Erlang, 2nd》第20章,“Mnesia:The Erlang Database”,326页。其中涉及到比如“2个表联合查询”。


QLC在erl源码中的用法示例:

Mnesia数据库操作整理(1)


7、删除mnesia:delete

要从数据库删除一行,需要知道该行的对象ID(OID)。对象ID由一个由表名和主键构成的二元组。

示例:

Mnesia数据库操作整理(1)


8、更新操作

Mnesia数据表里没有UPDATE的概念,如果要修改某条记录,根据表的不同类型,可以先删除,再插入新的记录,或者直接添加新记录代替旧的记录。


9、事务操作

事务代码的结构:

Mnesia数据库操作整理(1)


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

Astar質押原理、收益拆解、空投項目及策略 & 操作保姆級攻略 Astar質押原理、收益拆解、空投項目及策略 & 操作保姆級攻略 Jun 25, 2024 pm 07:09 PM

目錄Astar Dapp 質押原理質押收益 拆解潛在空投項目:AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap 質押策略 & 操作“AstarDapp質押”今年初已升級至V3版本,對質押收益規則做了不少調整。目前首個質押週期已結束,第二質押週期的「投票」子週期剛開始。若要獲得「額外獎勵」收益,需掌握此關鍵階段(預計持續至6月26日,現餘不到5天)。我將細緻拆解Astar質押收益,

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

PHP與不同資料庫的連接:MySQL、PostgreSQL、Oracle和更多 PHP與不同資料庫的連接:MySQL、PostgreSQL、Oracle和更多 Jun 01, 2024 pm 03:02 PM

PHP連接資料庫指南:MySQL:安裝MySQLi擴展,建立連線(servername、username、password、dbname)。 PostgreSQL:安裝PgSQL擴展,建立連線(host、dbname、user、password)。 Oracle:安裝OracleOCI8擴展,建立連線(servername、username、password)。實戰案例:取得MySQL資料、PostgreSQL查詢、OracleOCI8更新記錄。

See all articles