create_table(Name :: table(), Arg :: [create_option()]) ->
t_result(ok)
根据参数 TabDef
创建一个名为 Name
的 Mnesia 表。该列表必须是 {Item, Value}
元组的列表,其中允许使用以下值:
-
{access_mode, Atom}
。访问模式默认为原子read_write
,但也可以设置为原子read_only
。如果AccessMode
设置为read_only
,则无法执行表更新。启动时,Mnesia 始终在本地加载
read_only
表,无论 Mnesia 何时以及是否在其他节点上终止。该参数返回表的访问模式。访问模式可以是read_only
或read_write
。 -
{attributes, AtomList}
是应填充表的记录的属性名称列表。默认为[key, val]
。除了键之外,表还必须至少有一个额外的属性。当访问记录中的单个属性时,没有必要,甚至不建议将任何属性名称硬编码为原子。请改用构造
record_info(fields, RecordName)
。它可用于RecordName
类型的记录。 -
{disc_copies, Nodelist}
,其中Nodelist
是该表应该具有光盘副本的节点列表。如果表副本的类型为disc_copies
,则该表的该特定副本上的所有写入操作都将写入磁盘和表的 RAM 副本。一个节点上可能有
disc_copies
类型的复制表,而另一个节点上可能有另一种类型的复制表。默认为[]
。 -
{disc_only_copies, Nodelist}
,其中Nodelist
是该表应该具有disc_only_copies
的节点列表。仅磁盘表副本仅保存在磁盘上,与其他副本类型不同,副本的内容不驻留在 RAM 中。这些副本比 RAM 中保存的副本慢得多。 -
{index, Intlist}
,其中Intlist
是 Mnesia 为其构建和维护额外索引表的属性名称(原子)或记录字段的列表。如果有可用索引,qlc
查询编译器也许能够优化查询。 -
{load_order, Integer}
。加载顺序优先级默认为0
(零),但可以设置为任何整数。启动时首先加载具有最高加载顺序优先级的表。 -
{majority, Flag}
,其中Flag
必须是布尔值。如果true
,则对表的任何(非脏)更新都会中止,除非大多数表副本可用于提交。当在碎片表上使用时,所有碎片都被赋予相同的多数设置。 -
{ram_copies, Nodelist}
,其中Nodelist
是该表应该具有 RAM 副本的节点列表。ram_copies
类型的表副本不会基于每个事务写入磁盘。可以使用函数mnesia:dump_tables(Tabs)
将ram_copies
副本转储到光盘。此属性的默认值为[node()]
。 -
{record_name, Name}
,其中Name
必须是原子。表中存储的所有记录都必须将此名称作为第一个元素。它默认与表名相同。 -
{snmp, SnmpStruct}
。有关SnmpStruct
的说明,请参阅mnesia:snmp_open_table/2
。如果此属性存在于ArgList
到mnesia:create_table/2
中,则 SNMP 可以立即访问该表。因此,使用 SNMP 来操纵和控制系统的应用程序可以很容易地设计,因为 Mnesia 提供了组成 SNMP 控制应用程序的逻辑表和组成 Mnesia 表的物理数据之间的直接映射。 -
{storage_properties, [{Backend, Properties}]
将更多属性转发到后端存储。Backend
目前可以是ets
或dets
。Properties
是建表时发送到后端存储的选项列表。Properties
不能包含 Mnesia 已使用的属性,例如type
或named_table
。例如:
mnesia:create_table(table, [{ram_copies, [node()]}, {disc_only_copies, nodes()}, {storage_properties, [{ets, [compressed]}, {dets, [{auto_save, 5000}]} ]}])
-
{type, Type}
,其中Type
必须是原子set
、ordered_set
或bag
之一。默认为set
。在set
中,所有记录都有唯一的键。在bag
中,多个记录可以具有相同的键,但记录内容是唯一的。如果存储非唯一记录,则旧的冲突记录将被覆盖。请注意,
disc_only_copies
目前不支持ordered_set
。 -
{local_content, Bool}
,其中Bool
是true
或false
。默认为false
。
例如,以下调用创建 person
表(之前定义)并将其复制到两个节点上:
mnesia:create_table(person,
[{ram_copies, [N1, N2]},
{attributes, record_info(fields, person)}]).
如果要求 Mnesia 必须在表中插入的所有 person
记录的属性 address
上构建和维护一个额外的索引表,则会发出以下代码:
mnesia:create_table(person,
[{ram_copies, [N1, N2]},
{index, [address]},
{attributes, record_info(fields, person)}]).
index
和attributes
的规范可以分别为hard-coded、{index, [2]}
和{attributes, [name, age, address, salary, children]}
。
mnesia:create_table/2
将记录写入表 schema
。该函数以及所有其他模式操作函数都是使用普通的事务管理系统来实现的。这保证了模式更新以原子方式在所有节点上执行。
相关用法
- erlang crc32(OldCrc, Data)用法及代码示例
- erlang crc32_combine(FirstCrc, SecondCrc, SecondSize)用法及代码示例
- erlang crc32(Z, PrevCRC, Data)用法及代码示例
- erlang crypto_key_fun(CryptoKeyFun)用法及代码示例
- erlang cos用法及代码示例
- erlang concat用法及代码示例
- erlang chr用法及代码示例
- erlang copy用法及代码示例
- erlang ceil(Number)用法及代码示例
- erlang carriers(Options)用法及代码示例
- erlang cons(Item, Q1 :: queue(Item))用法及代码示例
- erlang cd(Dir)用法及代码示例
- erlang cmd(Command)用法及代码示例
- erlang consult(Filename)用法及代码示例
- erlang casefold(String :: unicode:chardata())用法及代码示例
- erlang chomp(String :: unicode:chardata())用法及代码示例
- erlang cspan(String, Chars)用法及代码示例
- erlang concat(Things)用法及代码示例
- erlang connect(Address, Port, Opts)用法及代码示例
- erlang characters_to_list(Data, InEncoding)用法及代码示例
- erlang characters_to_nfc_list(CD :: chardata())用法及代码示例
- erlang characters_to_nfc_binary(CD :: chardata())用法及代码示例
- erlang characters_to_nfd_list(CD :: chardata())用法及代码示例
- erlang characters_to_nfd_binary(CD :: chardata())用法及代码示例
- erlang characters_to_nfkc_list(CD :: chardata())用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 create_table(Name :: table(), Arg :: [create_option()]) -> t_result(ok)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。