Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。

参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样,我们也创建这样一个表erlang_sequence,用来索引其他表的自增id,看似麻烦,效果还是很理想。

-module(m).
-export([init/0, reg/2]).
-record(user, {id, name, age}).
-record(erlang_sequence, {name, seq}).%自增索引表,维护其他表的自增id init() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(erlang_sequence, [{attributes, record_info(fields,
erlang_sequence)} , {type,set}, {disc_copies, [node()]} ]),
mnesia:create_table(user, [{attributes, record_info(fields, user)} ,
{type,set}, {disc_copies, [node()]} ]),
ok. reg(Name, Age) ->
F = fun() ->
UserId = mnesia:dirty_update_counter(erlang_sequence, user, 1),
User = #user{id = UserId, name = Name, age = Age },
mnesia:write(User)
end,
mnesia:transaction(F),
ok.

运行代码:

D:\>erl -mnesia dir '"mnesia"'
Eshell V5.10.2 (abort with ^G)
1> c(m).
{ok,m}
2> m:init().
ok
3> m:reg("xiaomin",18).
ok
4> m:reg("xiaohong",17).
ok
5> tv:start().
<0.92.0>

Mnesia数据库视图:

erlang mnesia数据库设置主键自增的更多相关文章

  1. 在Oracle中设置主键自增

    转自:https://www.2cto.com/database/201705/636725.html 数据库设置主键自增">oracle数据库设置主键自增: --创建表 create ...

  2. 使用powerdesigner建模时设置主键自增的问题

    研究了一下,其实只要双击表,选择columns,再双击在你所要设为自增型的键上(比如你的id)或者右键选择Properties,弹出一个ColumnProperties 对话框,我们看到有标识 ide ...

  3. 关于oracle设置主键自增的问题

    关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...

  4. 使用navicat操作PostPreSql创建表并设置主键自增和触发器

    使用navicat操作PostPreSql创建表并设置主键自增和触发器 1).创建递增序列 2).创建表,使用序列,设置主键递增 3)定义触发函数 自动生成时间戳函数 CREATE OR REPLAC ...

  5. Oracle 创建表并设置主键自增

    创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...

  6. PL/SQL设置主键自增

    oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu:   一.创建表 create table menu( menuId n ...

  7. oracle数据库中的表设置主键自增

    oracle中没有自增字段,可通过序列+触发器间接实现,cmd中sqlplus登录,直接运行即可.一般要经过一下几步: 1建立数据表 create table Test_Increase(       ...

  8. ORACLE数据库实现主键自增

    ORACLE数据库是甲骨文公司的一款关系数据库管理系统. 实现主键自动增长需要四个步骤: 去看 创建表格 去看 创建自增序列 去看 创建触发器 去看 插入测试 1.创建表格(必须有主键) -- 创建学 ...

  9. Oracle设置主键自增

    oracle没有mysql那样可以有自增主键,需要自己通过创建序列才能实现自增 /*创建自增序列*/ CREATE SEQUENCE CMB_CHINA_CITYS_ID MINVALUE --最小值 ...

随机推荐

  1. 2014年10月16号--for语句实例

    Console.WriteLine("一对小兔一个月之后长成大兔,再过一个月后生新的一对兔子,且两年之后有多少对兔子,就是三兔子幼兔,小兔,成兔"); Console.WriteL ...

  2. Vijos1386 IOI2007 矿工配餐 动态规划

    感觉早些年IOI的题都不难啊,也就NOIp难度……现在貌似变难了 状态用dp[n][a1][b1][a2][b2]表示 n表示处理到前n个餐车 第一组矿工得到的最近一种食物用a1表示,a1的上一种食物 ...

  3. Sublime Text 皮肤插件安装

    安装皮肤, 举例sodahttps://github.com/buymeasoda/soda-themectrl+shift+p => Package Control: Install Pack ...

  4. C++实现base64编码(1)

    下面的代码是php里面的base64编码逻辑,确实比我之前的要美观很多,我只是简单的用C++的类进行了一下封装,删除了一些没用的逻辑,基本上还是原来PHP的代码: #include <iostr ...

  5. readline函数分析

    函数功能:提示用户输入命令,并读取命令/****************************************************************************/ /* ...

  6. Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML

    在Asp.Net MVC项目中通过重写ActionFilterAttribute中的方法,我们就可以在轻松的在Action方法执行前后做一些特殊的操作如:[身份认证.日志记录.内容截取等]. 但是我们 ...

  7. eclipse 比较好的插件

    tomcat 插件 egit github 插件 subeclipse 插件 Properties Editor Properties Editor 编辑java的属性文件,并可以自动存盘为Unico ...

  8. List of XML and HTML character entity references

    A character entity reference refers to the content of a named entity. An entity declaration is creat ...

  9. Frequent values

    poj3368:http://poj.org/problem?id=3368 题意:给你一个非下降的序列,然后查询[l,r]内出现最多数字的次数. 题解:首先,因为序列是非下降的,所以相同的数字出现在 ...

  10. c# 集合ArrayList;特殊集合Stack、Queue

    一)  ArrayList 1.foreach遍历数组中各个元素,执行内部语句 2.  3. 4.  myarry.Clear();//将集合清空 bool b = myarry.Contains(3 ...