Todos os produtos
Search
Central de documentação

Tablestore:Operações DML

Última atualização: Jun 30, 2026

Tabelas não transacionais no Tablestore aceitam instruções INSERT, UPDATE e DELETE via SQL.

Escopo

Item

Descrição

Tipo de tabela

Apenas tabelas não transacionais (criadas sem transações habilitadas)

Instruções DML compatíveis

INSERT, UPDATE, DELETE

Instruções de consulta

SELECT e SHOW não estão sujeitas às restrições de DML. Para mais informações, consulte a documentação de consultas SQL.

Sintaxe parcial de DML

INSERT IGNORE, ON DUPLICATE KEY UPDATE, REPLACE e sintaxes similares são compatíveis apenas com tabelas transacionais.

Pré-requisitos

Verifique se você tem:

  • Uma tabela não transacional

  • Um mapeamento SQL criado para a tabela por meio da instrução CREATE TABLE

Nota

Para executar operações DML com um usuário RAM, conceda a permissão SQL_DML a esse usuário. Para mais informações, consulte Política do RAM.

Métodos de acesso

Execute operações DML pelo console, SDKs ou outros métodos de acesso.

Console

  1. Acesse o console do Tablestore.

  2. Na página Overview, clique em Instance Name.

  3. Na página Instances, clique na aba Query by Executing SQL Statement.

  4. Insira uma instrução DML no editor SQL e clique em Execute SQL Statement.

Exemplo: inserir uma linha.

INSERT INTO my_table VALUES (1, 'value1', 100);

SDK

Java

Use SyncClient.sqlQuery() no SDK do Tablestore para Java para executar instruções DML. Chame getAffectedRows() em SQLQueryResponse para obter o número de linhas afetadas e getConsumedCapacity() para obter as CUs de leitura e escrita consumidas.

Nota

É necessária a versão 5.17.11 ou posterior do SDK.

SQLQueryRequest request = new SQLQueryRequest("INSERT INTO my_table VALUES (1, 'value1', 100)");
SQLQueryResponse response = client.sqlQuery(request);
long affectedRows = response.getAffectedRows();
Map<String, ConsumedCapacity> consumedCapacity = response.getConsumedCapacity();

Go

Use TableStoreClient.SQLQuery() no SDK do Tablestore para Go para executar instruções DML. Leia o campo AffectedRows de SQLQueryResponse para obter o número de linhas afetadas e SQLQueryConsumed para obter as CUs de leitura e escrita consumidas.

Nota

É necessária a versão 1.9.2 ou posterior do SDK.

request := &tablestore.SQLQueryRequest{Query: "INSERT INTO my_table VALUES (1, 1, 100, 'hello')"}
response, err := client.SQLQuery(request)
if err != nil {
    log.Fatal(err)
}
affectedRows := response.AffectedRows
consumed := response.SQLQueryConsumed

Instruções INSERT

Tabelas não transacionais aceitam inserções de linha única e inserções em lote atômicas de várias linhas dentro da mesma chave de partição. Se ocorrer um conflito de chave primária, o sistema retornará um erro e não sobrescreverá os dados existentes.

Inserção de linha única

INSERT INTO user_table VALUES (1, 'value1', 100);

Inserção em lote de várias linhas na mesma chave de partição

É possível inserir atomicamente em lote linhas que compartilham a mesma chave de partição, com limite de 200 linhas por lote. O exemplo a seguir usa o esquema de tabela user_table(pk1 BIGINT, pk2 VARCHAR(1024), value BIGINT), em que pk1 é a chave de partição. Como ambas as linhas têm pk1 = 1, elas pertencem à mesma partição.

INSERT INTO user_table VALUES (1, 'attr1', 100), (1, 'attr2', 200);

Observações de uso

  • Conflito de chave primária: a inserção de uma linha com chave primária já existente retorna o código de erro OTSParameterInvalid com uma mensagem contendo Duplicate entry for key 'PRIMARY'. Os dados existentes não são sobrescritos.

  • Inserção em lote entre partições: todas as linhas em um INSERT em lote devem compartilhar a mesma chave de partição. Inserções em lote com chaves de partição diferentes falham.

  • Limite de tamanho do lote: um INSERT em lote com mais de 200 linhas é rejeitado.

  • Linhas afetadas: um INSERT de linha única retorna 1 em caso de sucesso. Um INSERT em lote de N linhas retorna N em caso de sucesso. Conflitos de chave primária não retornam linhas afetadas e geram erro diretamente.

Instruções UPDATE

Tabelas não transacionais aceitam apenas atualizações de linha única identificadas por condição de igualdade completa da chave primária na cláusula WHERE. Para chaves primárias compostas, a ordem das colunas na cláusula WHERE não precisa corresponder à ordem de definição da chave primária.

Atualização com valores constantes

Atualize uma ou mais colunas simultaneamente.

-- Single-column update
UPDATE user_table SET attr_col = 999 WHERE pk_col = 1;

-- Multi-column update
UPDATE user_table SET c1 = 10, c2 = 20, c3 = 'updated' WHERE id = 1;

-- Composite primary key update. The column order in the WHERE clause can differ from the key definition order.
UPDATE user_table SET value = 999 WHERE pk2 = 2 AND pk1 = 1;

Incremento e decremento atômicos

Incremente ou decremente atomicamente colunas de atributo inteiras (BIGINT). Esse recurso é útil para contadores e casos de uso semelhantes. Apenas colunas de atributo BIGINT são compatíveis.

-- Increment by 1
UPDATE user_table SET counter = counter + 1 WHERE id = 1;

-- Increment by a specified value
UPDATE user_table SET counter = counter + 10 WHERE id = 1;

-- Decrement
UPDATE user_table SET counter = counter - 5 WHERE id = 1;

Definir uma coluna de atributo como NULL

Definir uma coluna de atributo como NULL remove a coluna da linha em vez de armazenar um valor NULL.

UPDATE user_table SET attr_col = NULL WHERE pk_col = 1;

Observações de uso

  • A cláusula WHERE deve especificar a chave primária completa com condições de igualdade: os casos a seguir não são compatíveis e retornam o código de erro OTSParameterInvalid ou OTSUnsupportOperation:

    • A cláusula WHERE não contém a chave primária completa.

    • A cláusula WHERE referencia colunas fora da chave primária.

    • A cláusula WHERE usa condições de intervalo (>, <, BETWEEN e operadores similares).

    • A cláusula WHERE usa IN, LIKE, OR, != ou outras condições de não igualdade.

    • A cláusula WHERE inclui condições de coluna de atributo além da chave primária completa.

  • Colunas de chave primária não podem ser modificadas: o UPDATE não permite alterar valores de colunas de chave primária por meio do SET.

  • Linha inexistente: a atualização de uma linha inexistente é concluída silenciosamente com 0 linhas afetadas e nenhum erro.

Instruções DELETE

Tabelas não transacionais aceitam apenas exclusões de linha única identificadas por condição de igualdade completa da chave primária na cláusula WHERE. Assim como no UPDATE, a ordem das colunas na cláusula WHERE não precisa corresponder à ordem de definição da chave primária para chaves primárias compostas.

-- Single primary key
DELETE FROM user_table WHERE pk_col = 1;

-- String primary key
DELETE FROM user_table WHERE id = 'abc';

-- Composite primary key
DELETE FROM user_table WHERE pk1 = 1 AND pk2 = 1;

-- Composite primary key with different column order
DELETE FROM user_table WHERE pk2 = 2 AND pk1 = 1;

Observações de uso

  • A cláusula WHERE deve especificar a chave primária completa com condições de igualdade: aplicam-se as mesmas restrições do UPDATE. Cláusula WHERE ausente, chave primária parcial, condições em colunas fora da chave primária, condições de intervalo, IN, LIKE, OR e condições adicionais de coluna de atributo não são compatíveis.

  • Linha inexistente: a exclusão de uma linha inexistente é concluída silenciosamente com 0 linhas afetadas e nenhum erro.

Limitações

As operações DML em tabelas não transacionais apresentam limitações de sintaxe SQL, tipos de dados, opções de coluna e tipos especiais de tabela.

Limitações de sintaxe SQL

As seguintes sintaxes SQL não são compatíveis:

Limitação

Aplica-se a

Descrição

Sem cláusula WHERE

UPDATE, DELETE

A chave primária completa deve ser especificada.

Colunas fora da chave primária no WHERE

UPDATE, DELETE

Apenas condições de igualdade de chave primária são compatíveis.

Chave primária parcial no WHERE

UPDATE, DELETE

Todas as colunas de uma chave primária composta devem ser especificadas.

Condições de intervalo (>, <=, BETWEEN)

UPDATE, DELETE

Apenas condições de igualdade são compatíveis.

Cláusula IN (multivalor)

UPDATE, DELETE

Apenas correspondência de igualdade de valor único é compatível.

Condições LIKE

UPDATE, DELETE

Correspondência de padrões não é compatível.

Condições OR

UPDATE, DELETE

OR lógico não é compatível.

Condições !=

UPDATE, DELETE

Condições de desigualdade não são compatíveis.

Condições IS NULL (colunas de atributo)

UPDATE, DELETE

Verificações de NULL em colunas de atributo não são compatíveis.

Combinação de chave primária + coluna de atributo

UPDATE, DELETE

Apenas condições puras de igualdade de chave primária são compatíveis.

ORDER BY

UPDATE, DELETE

Ordenação não é compatível.

LIMIT

UPDATE, DELETE

Limites de contagem de linhas não são compatíveis.

Opção IGNORE

UPDATE, DELETE

Supressão de erros não é compatível.

Configurações de prioridade (ex.: HIGH_PRIORITY)

INSERT, UPDATE, DELETE

Não compatível.

Operações multitabela

UPDATE, DELETE

Operações entre tabelas não são compatíveis.

Especificação de partição

INSERT, UPDATE, DELETE

Não compatível.

Dicas de índice

UPDATE, DELETE

Não compatível.

Sintaxe INSERT SET

INSERT

INSERT INTO t SET col=val não é compatível.

INSERT ... SELECT

INSERT

Inserção a partir de resultados de consulta não é compatível.

INSERT IGNORE

INSERT

Não compatível com tabelas não transacionais.

ON DUPLICATE KEY UPDATE

INSERT

Não compatível com tabelas não transacionais.

REPLACE

INSERT

Não compatível.

Atualização de colunas de chave primária

UPDATE

Valores de colunas de chave primária não podem ser alterados via SET.

Limite de linhas no INSERT em lote

INSERT

Máximo de 200 linhas por lote dentro da mesma chave de partição.

Limitações de tipo de dados

Tipo de dado

Pode ser chave primária

Limitações

BIGINT

Sim

UNSIGNED não é compatível. O intervalo válido para chave primária é de -9223372036854775808 a 9223372036854775806 ([-2^63, 2^63 - 2]). Long.MAX_VALUE é um valor reservado pelo sistema e não pode ser usado.

VARCHAR

Sim

Pode ser usado como coluna de chave primária.

VARBINARY

Sim

Pode ser usado como coluna de chave primária.

DOUBLE

Não

Não pode ser usado como chave primária.

MEDIUMBLOB

Não

Não pode ser usado como chave primária. Pode ser apenas coluna de atributo.

MEDIUMTEXT

Não

Não pode ser usado como chave primária.

BOOL / TINYINT(1)

Não

O comprimento deve ser 1. Não pode ser usado como chave primária.

Opções e restrições de coluna

O CREATE TABLE aceita apenas as seguintes opções de coluna: PRIMARY KEY, NOT NULL, NULL, DEFAULT VALUE e ON UPDATE. AUTO_INCREMENT, UNIQUE, CHECK, COMMENT e outras opções de coluna não são compatíveis.

Quanto a restrições, apenas PRIMARY KEY é compatível. UNIQUE, FOREIGN KEY, CHECK e outras restrições não são compatíveis.

Limitações de tipo especial de tabela

Tabelas vinculadas a índices de pesquisa e tabelas de alias não aceitam nenhuma operação DML (INSERT, UPDATE, DELETE).

Faturamento

Operações INSERT, UPDATE e DELETE em tabelas não transacionais são operações atômicas de linha única. Antes de cada gravação, o Tablestore valida a linha de destino, verificando, por exemplo, se ela existe ou se os valores das colunas foram alterados. Essa validação consome CUs de leitura.

  • Gravação efetiva ocorre: tanto CUs de leitura quanto de escrita são consumidas.

  • Nenhuma gravação efetiva ocorre (INSERT com conflito de chave primária, UPDATE ou DELETE em linha inexistente, ou UPDATE com valores de coluna inalterados): apenas CUs de leitura são consumidas. Nenhuma CU de escrita é consumida.