En esta página se describe cómo insertar, actualizar y eliminar datos mediante mutaciones. Una mutación representa una secuencia de inserciones, actualizaciones y eliminaciones que Spanner aplica de forma atómica a diferentes filas y tablas de una base de datos. Las mutaciones se han diseñado para escribir datos. No pueden leer datos de tus tablas. Muchas operaciones de actualización deben leer los datos existentes antes de realizar modificaciones. En estos casos, debes usar una transacción de lectura y escritura, que permite a Spanner leer filas y, a continuación, aplicar mutaciones en la misma operación atómica.
Aunque puedes confirmar mutaciones mediante gRPC o REST, lo más habitual es acceder a las APIs a través de las bibliotecas de cliente.
Si necesitas confirmar un gran número de escrituras ciegas, pero no necesitas una transacción atómica, puedes modificar en bloque tus tablas de Spanner mediante la escritura por lotes. Para obtener más información, consulta Modificar datos mediante escrituras por lotes.
Insertar filas en una tabla
C++
Para escribir datos, usa la función InsertMutationBuilder()
.
Client::Commit()
añade filas a una tabla. Todas las inserciones de un mismo lote se aplican de forma atómica.
Con este código se muestra cómo escribir los datos:
C#
Puede insertar datos con el método connection.CreateInsertCommand()
, que crea un SpannerCommand
para insertar filas en una tabla. El método SpannerCommand.ExecuteNonQueryAsync()
añade filas a la tabla.
En este código se muestra cómo insertar datos:
Go
Escribes datos con un Mutation
. Un Mutation
es un contenedor de operaciones de mutación. Una Mutation
representa una secuencia de inserciones, actualizaciones o eliminaciones que se pueden aplicar de forma atómica a diferentes filas y tablas de una base de datos de Spanner.
Usa Mutation.InsertOrUpdate()
para crear una mutación INSERT_OR_UPDATE
, que añade una fila o actualiza los valores de las columnas si la fila ya existe. También puedes usar el método
Mutation.Insert()
para crear una mutación INSERT
, que añade una nueva fila.
Client.Apply()
aplica
mutaciones de forma atómica a una base de datos.
Con este código se muestra cómo escribir los datos:
Java
Para escribir datos, se usa un objeto Mutation
. Un objeto Mutation
es un contenedor de operaciones de mutación. Una Mutation
representa una secuencia de inserciones, actualizaciones y eliminaciones que Spanner aplica de forma atómica a diferentes filas y tablas de una base de datos de Spanner.
El método newInsertBuilder()
de la clase Mutation
crea una mutación INSERT
que inserta una fila en una tabla. Si ya existe la fila, no se puede escribir. También puede usar el método newInsertOrUpdateBuilder
para crear una mutación INSERT_OR_UPDATE
, que actualiza los valores de las columnas si la fila ya existe.
El método write()
de la clase DatabaseClient
escribe las mutaciones. Todas las mutaciones de un solo lote se aplican de forma atómica.
Con este código se muestra cómo escribir los datos:
Node.js
Para escribir datos, se usa un objeto Table
. El método Table.insert()
añade filas a la tabla. Todas las inserciones de un mismo lote se aplican de forma atómica.
Con este código se muestra cómo escribir los datos:
PHP
Para escribir datos, usa el método Database::insertBatch
. insertBatch
añade filas a una tabla. Todas las inserciones de un mismo lote se aplican de forma atómica.
Con este código se muestra cómo escribir los datos:
Python
Para escribir datos, se usa un objeto Batch
. Un objeto Batch
es un contenedor de operaciones de mutación. Una mutación representa una secuencia de inserciones, actualizaciones o eliminaciones que se pueden aplicar de forma atómica a diferentes filas y tablas de una base de datos de Spanner.
El método insert()
de la clase Batch
se usa para añadir una o varias mutaciones de inserción al lote. Todas las mutaciones de un mismo lote se aplican de forma atómica.
Con este código se muestra cómo escribir los datos:
Ruby
Para escribir datos, se usa un objeto Client
. El método
Client#commit
crea y confirma una transacción para las escrituras que se ejecutan de forma atómica
en un único punto lógico en el tiempo en columnas, filas y tablas de una
base de datos.
Con este código se muestra cómo escribir los datos:
Actualizar filas de una tabla
Supongamos que las ventas de Albums(1, 1)
son inferiores a lo esperado. Por lo tanto, quieres transferir 200.000 € del presupuesto de marketing de Albums(2, 2)
a Albums(1, 1)
, pero solo si hay dinero disponible en el presupuesto de Albums(2, 2)
.
C++
Usa la función Transaction()
para llevar a cabo una transacción para un cliente.
Este es el código para ejecutar la transacción:
C#
En .NET Standard 2.0 (o .NET 4.5) y versiones posteriores, puedes usar el framework .NET
TransactionScope()
para ejecutar una transacción. En todas las versiones compatibles de .NET, puedes crear una transacción asignando el resultado de SpannerConnection.BeginTransactionAsync
a la propiedad Transaction
de SpannerCommand
.
Estas son las dos formas de ejecutar la transacción:
.NET Standard 2.0
.NET Standard 1.5
Go
Usa el tipo ReadWriteTransaction
para ejecutar un conjunto de tareas en el contexto de una transacción de lectura y escritura.
Client.ReadWriteTransaction()
devuelve un objeto ReadWriteTransaction
.
En el ejemplo se usa ReadWriteTransaction.ReadRow()
para obtener una fila de datos.
La muestra también usa ReadWriteTransaction.BufferWrite()
,
que añade una lista de mutaciones al conjunto de actualizaciones que se aplicarán
cuando se confirme la transacción.
El ejemplo también usa el Key
type, que representa una clave de fila en una tabla o un índice de Spanner.
Java
Usa la interfaz TransactionRunner
para ejecutar un conjunto de tareas en el contexto de una transacción de lectura y escritura. Esta interfaz contiene el método run()
, que se usa para ejecutar una transacción de lectura y escritura, con reintentos según sea necesario. El método readWriteTransaction
de la clase DatabaseClient
devuelve un objeto TransactionRunner
para ejecutar una sola transacción lógica.
La clase TransactionRunner.TransactionCallable
contiene un método run()
para realizar un solo intento de una transacción. run()
usa un objeto TransactionContext
, que es un contexto de una transacción.
En el ejemplo se usa la clase Struct
, que es útil para almacenar los resultados de las llamadas readRow()
. El ejemplo también usa la clase Key
, que representa una clave de fila en una tabla o un índice de Spanner.
Este es el código para ejecutar la transacción:
Node.js
Usa Database.runTransaction()
para realizar una transacción.
Este es el código para ejecutar la transacción:
PHP
Usa Database::runTransaction
para realizar una transacción.
Este es el código para ejecutar la transacción:
Python
Usa el método run_in_transaction()
de la clase Database
para ejecutar una transacción.
Este es el código para ejecutar la transacción:
Ruby
Usa el método transaction
de la clase Client
para ejecutar una transacción.
Este es el código para ejecutar la transacción:
Eliminar filas de una tabla
Cada biblioteca de cliente ofrece varias formas de eliminar filas:
- Eliminar todas las filas de una tabla.
- Elimina una sola fila especificando los valores de la columna clave de la fila.
- Eliminar un grupo de filas creando un intervalo de claves.
- Elimina filas de una tabla intercalada eliminando las filas principales, si la tabla intercalada incluye
ON DELETE CASCADE
en su definición de esquema.
C++
Elimina filas mediante la función DeleteMutationBuilder()
de un cliente.
Este código muestra cómo eliminar los datos:
C#
Elimina filas con el método connection.CreateDeleteCommand()
, que crea un nuevo SpannerCommand
para eliminar filas. El método SpannerCommand.ExecuteNonQueryAsync()
elimina las filas de la tabla.
En este ejemplo, se eliminan las filas de la tabla Singers
una a una. Las filas de la tabla Albums
se eliminan porque la tabla Albums
está intercalada en la tabla Singers
y se define con ON DELETE CASCADE
.
Go
Elimina filas con Mutation
. Usa el método Mutation.Delete()
para crear una mutación DELETE
, que elimina una fila. El método Client.Apply()
aplica
mutaciones de forma atómica a la base de datos.
En este ejemplo, se eliminan las filas de la tabla Albums
de forma individual y, a continuación, se eliminan todas las filas de la tabla Singers
mediante un KeyRange.
Java
Elimina filas con el método Mutation.delete()
.
En este ejemplo se usa el método KeySet.all()
para eliminar todas las filas de la tabla Albums
. Después de eliminar las filas de la tabla Albums
, el ejemplo elimina las filas de la tabla Singers
de forma individual
mediante las claves creadas con el método KeySet.singleKey()
.
Node.js
Elimina filas con el método table.deleteRows()
.
En este ejemplo se usa el método table.deleteRows()
para eliminar todas las filas de la tabla Singers
. Las filas de la tabla Albums
se eliminan porque
la tabla Albums
está intercalada en la tabla Singers
y se define con ON
DELETE CASCADE
.
PHP
Elimina las filas con Database::delete() method
. En la página del método Database::delete()
se incluye un ejemplo.
Python
Elimina filas con el método Batch.delete()
.
En este ejemplo se eliminan todas las filas de las tablas Albums
y Singers
de forma individual mediante un objeto KeySet
.
Ruby
Elimina filas con el método Client#delete
. La página Client#delete
incluye un ejemplo.