主键列自增

更新时间:
复制为 MD 格式

使用 Tablestore SDK for Node.js 为数据表配置自增主键列,向自增列写入数据,并获取系统生成的自增值。

前提条件

开始前,确保已完成客户端初始化。详情请参见初始化Tablestore Client

了解自增列行为

自增列在同一分区键下生成的值唯一且单调递增,但不保证连续。

创建含自增主键列的数据表

建表时,将某个非分区键的主键列的 option 设为 AUTO_INCREMENT,即可将其声明为自增列。该列必须为 INTEGER 类型。一个数据表最多只能设置一个自增列,且无法为已有数据表添加自增列。

说明

自增列生成的值为 64 位有符号长整型。只有非分区键列支持 AUTO_INCREMENT 选项。

示例

以下示例创建数据表 test_table,包含两个主键列:id(分区键,STRING 类型)和 incr(自增列,INTEGER 类型)。

function createTableSample() {
    var createParams = {
        tableMeta: {
            tableName: 'test_table',
            primaryKey: [
                {
                    name: 'id',
                    type: 'STRING'       // 分区键——每次写入时由调用方提供
                },
                {
                    name: 'incr',
                    type: 'INTEGER',
                    option: 'AUTO_INCREMENT'  // 自增列——Tablestore 自动生成该值
                },
            ]
        },
        tableOptions: {
            timeToLive: -1,   // -1 表示数据永不过期
            maxVersions: 1
        },
        reservedThroughput: {
            capacityUnit: {
                read: 0,
                write: 0
            }
        },
    };

    client.createTable(createParams, function (err, data) {
        if (err) {
            console.error('error:', err);
            return;
        }
        console.log('success:', data);
    });
}

写入数据

写入数据行时,将自增列的值设为 TableStore.PK_AUTO_INCR——这是一个占位符,Tablestore 会用系统生成的值替换它。如需获取生成的自增值(例如用于后续查询或更新),在 returnContent 中将 returnType 设为 TableStore.ReturnType.Primarykey

示例

以下示例向 test_table 写入一行数据,并打印系统生成的主键信息。

function putRowSample() {
    var putParams = {
        tableName: 'test_table',
        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
        primaryKey: [
            { id: 'row1' },
            // 使用 PK_AUTO_INCR 作为占位符,Tablestore 会将其替换为自动生成的值
            { incr: TableStore.PK_AUTO_INCR }
        ],
        attributeColumns: [
            { 'col1': 'val1' }
        ],
        // 返回完整主键,以便后续查询中使用生成的 incr 值
        returnContent: { returnType: TableStore.ReturnType.Primarykey }
    };

    client.putRow(putParams, function (err, data) {
        if (err) {
            console.error('error:', err);
            return;
        }

        // 请求元数据及消耗的读写 CU
        console.log("RequestId: ", data.RequestId);
        console.log("Read CU Cost: ", data.consumed.capacityUnit.read);
        console.log("Write CU Cost: ", data.consumed.capacityUnit.write);

        // 打印生成的主键信息(含自增值)
        // 仅在 returnType 设为 Primarykey 时返回
        if (data.row.primaryKey) {
            console.log(JSON.stringify(data.row.primaryKey));
        }
    });
}