如果事务异常终止,Mnesia 将自动释放该事务的锁。
我们在前面已经示范了一些可以用于事务中的函数。下面会列出可在事务中工作的最简单的
Mnesia 函数。重要的是要知道这些函数必须被嵌入到事务中。如果没有封装事务(或其他可用来
封装的 Mnesia 作业)存在,这些函数将失败。
•
mnesia:transaction(Fun) -> {aborted, Reason} |{atomic, Value},这
个函数用函数对象 Fun 作为单独的参数执行一个事务。
•
mnesia:read({Tab, Key}) -> transaction abort | RecordList,这个函数
从表 Tab 中读取全部键值为 Key 的记录。无论表在哪里,此函数具有同样的语义。如果表
的类型是 bag,则 read({Tab, Key})可能返回一个任意长的列表。如果表的类型是 set,则
列表的长度等于一或者为[]。
•
mnesia:wread({Tab, Key}) -> transaction abort | RecordList,该函数
与上面列出的 read/1 函数行为一样,只是其会获取一个写锁而不是一个读锁。如果我们执
行一个读取一条记录,修改这条记录,然后再写此记录的事务,那么立即设置一个写锁会
更有效。 如果我们先调用 mnesia:read/1,然后调用 mnesia:write/1,那么执行写操作时必须
将读锁升级为写锁。
•
mnesia:write(Record) -> transaction abort | ok, 这个函数将一条记录写
入数据库中。 Record 参数是记录的一个实例,此函数返回 ok 或者在错误发生时中止事务。
•
mnesia:delete({Tab, Key}) -> transaction abort | ok, 这个函数删除
Key 对应的所有记录。
•
mnesia:delete_object(Record) -> transaction abort | ok, 这个函数删
除对象标识为 Record 的记录。该函数仅用来删除表的类型为 bag 的记录。