特點
主鍵列自增具有如下特點:
說明 無論是否使用主鍵列自增功能,不影響條件更新的規則,條件更新的規則請參見條件更新。
注意事項
每張資料表最多隻能設定一個主鍵列為自增列,主鍵中的分區鍵不能設定為自增列。
只能在建立資料表時指定自增列,對於已存在的資料表不能建立自增列。
只有整型的主鍵列才能設定為自增列,系統自動產生的自增列值為64位的有符號長整型。
屬性列不能設定為自增列。
主鍵自增列功能和局部事務功能不能同時使用。
寫入資料到帶有自增主鍵列的表時,請務必返回並記錄自增列的值,用於後續資料更新或者資料讀取。
介面
主鍵列自增的相關介面說明請參見下表。
介面 | 說明 |
CreateTable | 建立資料表時,請設定非分區鍵的主鍵列為自增列,否則無法使用主鍵列自增功能。 |
UpdateTable | 資料表建立後,不能通過UpdateTable修改資料表的主鍵列為自增列。 |
PutRow | 寫入資料時,無需為自增列設定具體值,Tablestore會自動產生自增列的值。 通過設定ReturnType為RT_PK,可以擷取完整的主索引值,完整的主索引值可以用於GetRow查詢資料。
重要 要更新已存在的行資料時,如果未記錄自增主鍵列的值,請先通過GetRange介面擷取要更新的行主鍵資訊,然後再進行資料更新。 |
UpdateRow |
BatchWriteRow |
GetRow | 使用GetRow時需要完整的主索引值,通過設定PutRow、UpdateRow或者BatchWriteRow中的ReturnType為RT_PK可以擷取完整的主索引值。
重要 寫入資料時,如果未記錄自增主鍵列的值,您可以使用範圍讀取資料按照第一個主鍵列確定範圍讀取資料。更多資訊,請參見範圍讀取資料。 |
BatchGetRow |
使用方式
使用控制台
建立帶有自增主鍵列的資料表。
登入Table Store控制台。
在概覽頁面,單擊執行個體操作列的執行個體管理。
在執行個體詳情頁簽的資料表列表地區,單擊建立資料表。
在建立資料表對話方塊,配置資料表名稱和表主鍵,其他參數請根據實際情境進行配置。
配置表主鍵時,您需要將其中一個非分區鍵的主鍵列類型選擇為自增列。
單擊確定。
寫入資料。
在執行個體詳情頁簽的資料表列表地區,單擊資料表名稱。
在資料管理頁簽,單擊插入資料。
在插入資料對話方塊,輸入主索引值以及根據實際增加屬性列。
其中自增列的值無需填寫,系統會在寫入資料時自動產生自增列的值。通過多次單擊表徵圖並配置屬性列的名稱、類型、屬性值等資訊,您可以增加多個屬性列。
單擊確定。
系統會顯示寫入成功的資料。請記錄行資料的完整主鍵資訊用於後續更新或者讀取資料。
使用命令列工具
建立並使用帶有自增主鍵列的資料表。
執行create
命令建立資料表。更多資訊,請參見建立表。
以下樣本用於建立帶有自增主鍵列的mytable資料表。該資料表有uid(string類型)和pid(integer類型)兩個主鍵列並設定第二主鍵列pid(integer類型)為自增列,表中資料永不到期。
create -t mytable --pk '[{"c":"uid", "t":"string"}, {"c":"pid", "t":"integer", "opt":"auto"}]'
執行use --wc -t mytable
命令使用資料表。
執行put
命令寫入一行資料。更多資訊,請參見插入新資料。
說明 寫入資料後,如果需要擷取完整主鍵資訊,您可以執行scan
命令擷取指定行資料。更多資訊,請參見掃描資料或者匯出資料。
以下樣本用於在資料表中插入一行資料。該行的第一主鍵列值為“86”,第二主鍵列值為null,屬性列有name(string類型)和country(string類型)兩列。
put --pk '["86", null]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'
使用SDK
您可以通過Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK和PHP SDK使用主鍵自增列功能。此處以Java SDK為例介紹主鍵自增列的使用。
建立帶有自增主鍵列的資料表。
建立表時,只需將自增的主鍵屬性設定為AUTO_INCREMENT。
以下樣本用於建立資料表時配置主鍵自增列。該表的主鍵為pk1(String類型)和pk2(Integer類型),其中pk1主鍵列為分區鍵,pk2主鍵列為自增列。
private static void createTable(SyncClient client) {
//設定資料表名稱。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//為資料表添加主鍵列。第一列為分區鍵。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
//為資料表添加主鍵列。第二列為自增列,類型為INTEGER,屬性為AUTO_INCREMENT。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
//資料的到期時間,單位為秒,-1表示資料永不到期。
int timeToLive = -1;
//儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(request);
}
寫入資料。
寫入資料時,無需為自增列設定具體值,只需將自增列的值設定為預留位置AUTO_INCREMENT。
以下樣本用於向資料表中寫入一行資料,並返回完整主索引值和消耗的預留讀寫輸送量。
private static void putRow(SyncClient client, String receive_id) {
//構造主鍵。
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
//第一列的值為receive_id(String類型)參數的值。
primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(receive_id));
//第二列是主鍵自增列,此處無需填入具體值,只需要一個預留位置AUTO_INCREMENT,Table Store會自動產生此值。
primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.AUTO_INCREMENT);
PrimaryKey primaryKey = primaryKeyBuilder.build();
//設定資料表名稱。
RowPutChange rowPutChange = new RowPutChange("<TABLE_NAME>", primaryKey);
//此處設定傳回型別為RT_PK,即在返回結果中包含PK列的值。如果不設定ReturnType,預設不返回。
rowPutChange.setReturnType(ReturnType.RT_PK);
//加入屬性列。
rowPutChange.addColumn(new Column("content", ColumnValue.fromString("content")));
//寫入資料到Table Store。
PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange));
//列印返回的PK列。
Row returnRow = response.getRow();
if (returnRow != null) {
System.out.println("PrimaryKey:" + returnRow.getPrimaryKey().toString());
}
//列印消耗的CU。
CapacityUnit cu = response.getConsumedCapacity().getCapacityUnit();
System.out.println("Read CapacityUnit:" + cu.getReadCapacityUnit());
System.out.println("Write CapacityUnit:" + cu.getWriteCapacityUnit());
}
計費說明
使用主鍵列自增功能不影響現有計費規則,返回的主鍵列資料不會額外消耗讀CU。