mnesia資料庫的操作和以前習慣的sql資料庫操作幾乎完全不同,剛開始用很不使用。現將常見的讀寫操作整理於下:
1、髒讀
mnesia:dirty_read(tab,key)->valuelist | exit()
示例:
對於set型別的表,這個操作返回乙個值或者空表,因為set型別表鍵值不可重複。如果對bag型別(鍵值可重複,但不能同鍵又同值)用髒讀,結果是乙個或若干值的列表,乙個值都沒有就是個空表。
示例:
2、髒寫
mnesia:dirty_write(tab,record) -> ok | exit()
示例:
3、讀read
這個操作,只能用在事務中,所以也不能直接在shell裡使用。
示例:
4、寫write
同上,普通的寫操作也必須在事務中完成,否則會報錯。
示例:
小結:read和write都是用於事務的,在不使用事務的時候,直接用dirty_read和dirty_write。
另,以上2種讀操作都是按照主鍵進行查詢。
5、使用帶匹配規範的mnesia:select
這個命令也必須放到事務中才能執行。第乙個引數是要查詢的表,第二個引數是匹配規範。是個格式的三元組。
head是個erlang項式,用於描述查詢模式,其中的'$1','$2'等原子用於表示變數,其對應於記錄中第乙個、第二個字段,以此類推。
『_』(僅僅限於在head部分使用),表示無所謂,任意值都可以匹配,示例:
'$$'(僅僅限於results和conditions中使用),等價於羅列出依次在head部分匹配的所有變數'$1','$1','$1'等,示例參見上圖。這個主要用於我們只對查詢結果的部分字段感興趣的時候用,不需要把整條記錄都選擇出來。
'$_'(僅僅限於results和conditions中使用),表示與查詢條件相匹配的整條記錄,示例:
6、使用查詢列表速構(qlc)
qlc的全稱是query list comprehension。表面看,它類似於普通的列表速構,使用時,又必須巢狀於外觀類似於函式呼叫的qlc:q()中使用。實際上外層的qlc:q(...)只是乙個標記,用於讓編譯器區別對待其中的表示式。要啟用該功能,模組原始碼中必須加上下面這一行:
-include_lib("stdlib/include/qlc.hrl").
但作為特例,可以直接在erlang shell中使用qlc:q(...)。也可以在事務中使用qlc,任何可以在事務中使用的mnesia函式都可以與qlc混合使用。
示例:
上圖是僅僅獲取users表中的acc欄位。
這是獲取users表中的整條記錄。
有關qlc的更多複雜用法,可以參見erlang之父joe armstrong的新作《programming erlang, 2nd》第20章,「mnesia:the erlang database」,326頁。其中涉及到比如「2個表聯合查詢」。
qlc在erl原始碼中的用法示例:
7、刪除mnesia:delete
要從資料庫刪除一行,需要知道該行的物件id(oid)。物件id由乙個由表名和主鍵構成的二元組。
示例:8、更新操作
mnesia資料表裡沒有update的概念,如果要修改某條記錄,根據表的不同型別,可以先刪除,再插入新的記錄,或者直接新增新記錄代替舊的記錄。
9、事務操作
事務**的結構:
Erlang資料庫Mnesia操作
mnesia是一套輕量級的軟實時分布式資料儲存系統,支援冗餘複製和事務,特別適合於儲存離散的erlang資料塊,尤其擅長ram中的資料儲存。初始化資料庫步驟 1.啟動節點,erl mensa dir dir name mynode 2.建立資料庫模式,mnesia create schema nod...
mnesia資料庫表的id
對於mnesia資料庫表有時候需要有乙個id欄位,就像關聯式資料庫的主鍵.最簡單的辦法是用uuid做id,但是我們希望此id是整數遞增的.或者用 做id也是不錯的辦法.類似於乙個set集合 意思是集合中不可能兩個相同的鍵同時存在 每個鍵對應的值將作為id,方法mnesia dirty update ...
derby資料庫 操作整理
derby database操作 derby 配置hibernate自動生成 jdbc derby test create true 路徑在 tomcat bin目錄下生成 test derby 資料庫 derby資料庫 hibernate基本配置 hibernate.dialect org.hib...