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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。