Esta página descreve como inserir, atualizar e eliminar dados através de mutações. Uma mutação representa uma sequência de inserções, atualizações e eliminações que o Spanner aplica atomicamente a diferentes linhas e tabelas numa base de dados. As mutações foram concebidas para escrever dados. Não podem ler dados das suas tabelas. Muitas operações de atualização têm de ler os dados existentes antes de fazer modificações. Para estes exemplos de utilização, tem de usar uma transação de leitura/escrita, que permite ao Spanner ler linhas e, em seguida, aplicar mutações na mesma operação atómica.
Embora possa confirmar mutações através do gRPC ou do REST, é mais comum aceder às APIs através das bibliotecas cliente.
Se precisar de confirmar um grande número de escritas cegas, mas não precisar de uma transação atómica, pode modificar em massa as tabelas do Spanner através da escrita em lote. Para mais informações, consulte o artigo Modifique dados através de gravações em lote.
Inserir novas linhas numa tabela
C++
Escreve dados através da função InsertMutationBuilder()
.
Client::Commit()
adiciona novas linhas a uma tabela. Todas as inserções num único lote são aplicadas de forma atómica.
Este código mostra como escrever os dados:
C#
Pode inserir dados através do método connection.CreateInsertCommand()
, que cria um novo SpannerCommand
para inserir linhas numa tabela. O método
SpannerCommand.ExecuteNonQueryAsync()
adiciona novas linhas à tabela.
Este código mostra como inserir dados:
Go
Escreve dados através de um
Mutation
. Um Mutation
é um contentor para operações de mutação. Um Mutation
representa uma sequência de inserções, atualizações ou eliminações que podem ser aplicadas atomicamente a diferentes linhas e tabelas numa base de dados do Spanner.
Use Mutation.InsertOrUpdate()
para criar uma mutação INSERT_OR_UPDATE
, que adiciona uma nova linha ou atualiza os valores das colunas se a linha já existir. Em alternativa, use o método
Mutation.Insert()
para criar uma mutação INSERT
, que adiciona uma nova linha.
Client.Apply()
aplica mutações de forma atómica a uma base de dados.
Este código mostra como escrever os dados:
Java
Escreve dados através de um objeto Mutation
. Um Mutation
objeto é um contentor para operações de mutação. Uma Mutation
representa uma sequência de inserções, atualizações e eliminações que o Spanner aplica atomicamente a diferentes linhas e tabelas numa base de dados do Spanner.
O método newInsertBuilder()
na classe Mutation
cria uma mutação INSERT
, que insere uma nova linha numa tabela. Se a linha já existir, a gravação falha. Em alternativa,
pode usar o método newInsertOrUpdateBuilder
para criar uma mutação INSERT_OR_UPDATE
, que
atualiza os valores das colunas se a linha já existir.
O método write()
na classe DatabaseClient
escreve as mutações. Todas as mutações num único lote são aplicadas de forma atómica.
Este código mostra como escrever os dados:
Node.js
Escreve dados através de um objeto
Table
. O método
Table.insert()
adiciona novas linhas à tabela. Todas as inserções num único lote são aplicadas de forma atómica.
Este código mostra como escrever os dados:
PHP
Escreve dados através do método
Database::insertBatch
. insertBatch
adiciona novas linhas a uma tabela. Todas as inserções num único lote são aplicadas de forma atómica.
Este código mostra como escrever os dados:
Python
Escreve dados através de um objeto Batch
. Um objeto Batch
é um contentor para operações de mutação. Uma mutação representa uma sequência de inserções, atualizações ou eliminações que podem ser aplicadas atomicamente a diferentes linhas e tabelas numa base de dados do Spanner.
O método insert()
na classe Batch
é usado para
adicionar uma ou mais mutações de inserção ao lote. Todas as mutações num único lote são aplicadas de forma atómica.
Este código mostra como escrever os dados:
Ruby
Escreve dados através de um objeto
Client
. O método
Client#commit
cria e confirma uma transação para escritas que são executadas atomicamente
num único ponto lógico no tempo em colunas, linhas e tabelas numa
base de dados.
Este código mostra como escrever os dados:
Atualize linhas numa tabela
Suponhamos que as vendas de Albums(1, 1)
são inferiores ao esperado. Como resultado, quer transferir 200 000 € do orçamento de marketing de Albums(2, 2)
para Albums(1, 1)
, mas apenas se o dinheiro estiver disponível no orçamento de Albums(2, 2)
.
C++
Use a função Transaction()
para executar uma transação para um cliente.
Segue-se o código para executar a transação:
C#
Para o .NET Standard 2.0 (ou .NET 4.5) e mais recente, pode usar o
TransactionScope()
do framework .NET para executar uma transação. Para todas as versões suportadas do .NET, pode criar uma transação definindo o resultado de SpannerConnection.BeginTransactionAsync
como a propriedade Transaction
de SpannerCommand
.
Seguem-se as duas formas de executar a transação:
.NET Standard 2.0
.NET Standard 1.5
Go
Use o tipo ReadWriteTransaction
para executar um conjunto de tarefas no contexto de uma transação de leitura/escrita.
Client.ReadWriteTransaction()
devolve um objeto ReadWriteTransaction
.
O exemplo usa ReadWriteTransaction.ReadRow()
para obter uma linha de dados.
O exemplo também usa ReadWriteTransaction.BufferWrite()
, que adiciona uma lista de mutações ao conjunto de atualizações que serão aplicadas quando a transação for confirmada.
O exemplo também usa o tipo Key
, que representa uma chave de linha numa tabela ou num índice do Spanner.
Java
Use a interface TransactionRunner
para executar um conjunto de tarefas no contexto de uma transação de leitura/escrita. Esta interface
contém o método run()
, que é usado para executar uma transação de leitura/escrita, com novas tentativas conforme necessário. O método readWriteTransaction
da classe DatabaseClient
devolve um objeto TransactionRunner
para executar uma única transação lógica.
A classe TransactionRunner.TransactionCallable
contém um método run()
para realizar uma única tentativa de uma
transação. run()
recebe um objeto TransactionContext
, que é um contexto para uma transação.
A amostra usa a classe Struct
, que é útil para armazenar os resultados das chamadas readRow()
. A amostra também usa a classe Key
, que representa uma chave de linha numa tabela ou num índice do Spanner.
Segue-se o código para executar a transação:
Node.js
Use Database.runTransaction()
para executar uma transação.
Segue-se o código para executar a transação:
PHP
Use Database::runTransaction
para executar uma transação.
Segue-se o código para executar a transação:
Python
Use o método run_in_transaction()
da classe Database
para executar uma transação.
Segue-se o código para executar a transação:
Ruby
Use o método transaction
da classe Client
para executar uma transação.
Segue-se o código para executar a transação:
Elimine linhas numa tabela
Cada biblioteca cliente oferece várias formas de eliminar linhas:
- Eliminar todas as linhas numa tabela.
- Eliminar uma única linha especificando os valores da coluna de chave para a linha.
- Elimine um grupo de linhas criando um intervalo de chaves.
- Elimine linhas numa tabela intercalada eliminando as linhas principais, se a tabela intercalada incluir
ON DELETE CASCADE
na respetiva definição do esquema.
C++
Elimine linhas com a função DeleteMutationBuilder()
para um cliente.
Este código mostra como eliminar os dados:
C#
Elimine linhas através do método connection.CreateDeleteCommand()
, que
cria um novo SpannerCommand
para eliminar linhas. O método SpannerCommand.ExecuteNonQueryAsync()
elimina as linhas da tabela.
Este exemplo elimina as linhas na tabela Singers
individualmente. As linhas na tabela Albums
são eliminadas porque a tabela Albums
está intercalada na tabela Singers
e é definida com ON DELETE CASCADE
.
Go
Elimine linhas com um Mutation
. Use o método
Mutation.Delete()
para criar uma mutação DELETE
,
que elimina uma linha. O método Client.Apply()
aplica mutações de forma atómica à base de dados.
Este exemplo elimina as linhas na tabela Albums
individualmente e, em seguida, elimina todas as linhas na tabela Singers
através de um KeyRange.
Java
Elimine linhas com o método Mutation.delete()
.
Este exemplo usa o método KeySet.all()
para eliminar todas as linhas na tabela Albums
. Depois de eliminar as linhas na tabela Albums
, o exemplo elimina as linhas na tabela Singers
individualmente
usando chaves criadas com o método KeySet.singleKey()
.
Node.js
Elimine linhas com o método table.deleteRows()
.
Este exemplo usa o método table.deleteRows()
para eliminar todas as linhas da tabela Singers
. As linhas na tabela Albums
são eliminadas porque a tabela Albums
está intercalada na tabela Singers
e é definida com ON
DELETE CASCADE
.
PHP
Elimine linhas através do ícone Database::delete() method
. A página do método Database::delete()
inclui um exemplo.
Python
Elimine linhas com o método Batch.delete()
.
Este exemplo elimina todas as linhas nas tabelas Albums
e Singers
individualmente através de um objeto KeySet
.
Ruby
Elimine linhas com o método Client#delete
. A página
Client#delete
inclui um exemplo.