mnesia怎样改动表结构

mnesia创建的时候须要指定表record结构,假设定义的record结构改动了,就要更新数据的表结构。否则mnesia无法正常读取和写入数据。

我们最開始是这样定义结构的

-record(person, {name, age}).

然后这样建表

mnesia:create_table(person, [{disc_only_copies, nodes()}, {attributes, record_info(fields,person)}]).

有一天我们改变了这个person结构

-record(person, {name, age, money}).

我们还能够读出mnesia的数据。可是不能匹配到如今的person结构了

> mnesia:dirty_read(person, lucy).

[{person,lucy,1}]

并且我们无法再写入数据

> mnesia:dirty_write(person, #person{name = lily, age = 2, money = 0}).

** exception exit: {aborted,{bad_type,#person{name=lily,age=2, money=0}}}

in function  mnesia:abort/1 (mnesia.erl, line 309)

可是我们还想要使用这个数据库。能够这样改动数据库

Fun = fun(X)  ->

case X of

{person, Name, Age} ->

{person, Name, Age, 0};

_ ->

X

end

end,

NewAttr = [name, age, money],

mnesia:transform_table(person, Fun, NewAttr, person).

參考:

http://blog.csdn.net/mycwq/article/details/30101659

时间: 2024-11-05 06:49:33

mnesia怎样改动表结构的相关文章

mnesia如何修改表结构

mnesia创建的时候需要指定表record结构,如果定义的record结构修改了,就要更新数据的表结构,否则mnesia无法正常读取和写入数据. 我们最开始是这样定义结构的 -record(person, {name, age}). 然后这样建表 mnesia:create_table(person, [{disc_only_copies, nodes()}, {attributes, record_info(fields,person)}]). 有一天我们改变了这个person结构 -rec

ORACLE 改动表结构 之ALTER CONSTAINTS

1,创建联合主键 ALTER TABLE 表名 ADD CONSTRAINTS 结束名 PRIMARY KEY (列名,列名..); 2,新增字符 ALTER TABLE 表名 ADD (COLUMN DATATYPE [DEFAULT VALUE][NULL/NOT NULL]); 3,删除列 ALTER TABLE 表名 DROP (COLUMN)J; 4,改动表的字符 ALTER TABLE 表名 MODIFY (COLUMN  DATATYPE [DEFAULT VALUE][NULL/

[转载]github在线更改mysql表结构工具gh-ost

GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具! gh-ost是GitHub最近几个月开发出来的,目的是解决一个经常碰到的问题:不断变化的产品需求会不断要求更改MySQL表结构.gh-ost通过一种影响小.可控制.可审计.操作简单的方案来改变线上表结构. 在介绍gh-ost之前,我们先了解一下各种现有方案,以及为什么要自己开发一个新工具. 已有的在线修改表定义方案 目前,在线修改表定义的任务主要是通过这三种途径完成的: 在从库上修改表定义,修

开源一个适用iOS的数据库表结构更新机制的代码

将前段时间开源的代码,发布一下: ARDBConfig On the iOS, provide a database table structure update mechanism, ensure that the user in any version of the installer, the database structure to ensure adapter. (在iOS上,提供一个数据库表结构更新的机制,保证用户无论从哪个版本安装程序,数据库结构保证适配.) 如:用户A的数据库版

Oracle- 备份单表结构和单表数据

在网上看到,有用,记录如下: 这是Oracle的备份表结构和数据,因为实际工作对表进行大规模的数据改动都要讲数据进行备份,否则丢了数据那是很头疼的事情. --创建一份表结构 create table BASE_GOODSPAYMENT_SETTING_BAK as select * from BASE_GOODSPAYMENT_SETTING ; --将数据插入到备份表中 insert into BASE_GOODSPAYMENT_SETTING_BAK select * from BASE_G

DDL语句--改动表

改动表是指改动数据库中已经存在的表的定义.改动表比又一次定义表简单.不须要又一次载入数据.也不会影响正在进行的服务. MySQL中通过ALTER TABLE语句来改动表.改动表包含改动表名.改动字段数据类型,改动字段名.添加字段,删除字段,改动字段的排列位置.更改默认存储引擎和删除表的外键约束等. OK,这篇博客会具体的整理到上面的几种改动表的方式.如今我们開始. 1,改动表名 表名能够在一个数据库中唯一的确定一张表. 数据库系统通过表名来区分不同的表. 注意的是.数据库中的表是唯一的,数据库中

亲測Mysql表结构为InnoDB类型从ibd文件恢复数据

客户的机器系统异常关机,重新启动后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,仅仅能想办法从数据库文件其中恢复,查找资料,试验各种方法,确认以下步骤可行: 一.找回表结构.假设表结构没有丢失直接到下一步 a.先创建一个数据库.这个数据库必须是没有表和不论什么操作的. b.创建一个表结构.和要恢复的表名是一样的. 表里的字段无所谓. 一定要是innodb引擎的.CREATE TABLE `test`(  `testID` bigint(20))

ORACLE中创建表空间,创建表,改动表,授权

创建表空间 /*分为四步 */ /*第1步:创建暂时表空间  */ create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m   //假设最大值没有上限,则使用unlimited extent management local;  //extent 表示区间  设置区间管理方式是本地

Oracle备份表结构和数据

--创建一份表结构 create table BASE_GOODSPAYMENT_SETTING_BAK as select * from BASE_GOODSPAYMENT_SETTING ; --将数据插入到备份表中 insert into BASE_GOODSPAYMENT_SETTING_BAK select * from BASE_GOODSPAYMENT_SETTING; 这是Oracle的备份表结构和数据,因为实际工作对表进行大规模的数据改动都要讲数据进行备份,否则丢了数据那是很头