添加和移除数据库里的数据
之前我们创建了三个表cost表,shop表,design表,现在我们想为shop表添加或移除行。 可以像下面这样给shop表添加一行:
add_shop_item(Name, Quantity, Cost) ->
Row = #shop{item=Name, quantity= Quantity, cost=Cost},
F = fun() ->
mnesia:write(Row)
end,
mnesia:transaction(F).
start() ->
mnesia:start(),
mnesia:wait_for_tables([shop,cost,design], 20000).
列出shop表
然后我们添加一个新行
这里我们可以发现原本orange这里的值被更新了,也就是是在键已经存在的情况下去添加数据,就是跟新这个数据。
要移除某一行,需要知道该行的对象ID(Object ID,简称OID)。它由表名和主键的值构成。
remove_shop_item(Item) ->
Oid = {shop, Item},
F = fun() ->
mnesia:delete(Oid)
end,
mnesia:transaction(F).
简单粗暴的移除了pear
查询数据
我们在添加中使用的查询代码如下
demo(select_shop) ->
do(qlc:q([X || X <- mnesia:table(shop)]));
这段代码的重点是qlc:q调用,它会把查询(也就是它的参数)编译成一种用于查询数据库的内部格式。把编译后的查询传递给一个名为do()的函数,它会在接近test_mnesia底部的位置 进行定义,负责运行查询并返回结果。为了让这一切能够轻易从erl里调用,我们把它映射到函数demo(select_shop)上。
对了,如果要用qlc 那么我们就要引入
-include_lib("stdlib/include/qlc.hrl").
在编译器里面看可能会爆红就像这样
其实是不影响使用的