En esta página, se describe cómo insertar, actualizar y borrar datos mediante mutaciones. Una mutación representa una secuencia de inserciones, actualizaciones y eliminaciones que Spanner aplica de manera atómica a diferentes filas y tablas en una base de datos de Spanner.
Si bien puedes confirmar mutaciones con gRPC o REST, es más común acceder a las API a través de las bibliotecas cliente.
En esta página, se muestran las tareas básicas de insertar, actualizar y borrar. Puedes encontrar más ejemplos en los instructivos de introducción.
Si necesitas confirmar una gran cantidad de operaciones de escritura ciegas, pero no requieres una transacción atómica, puedes modificar de forma masiva tus tablas de Spanner con la operación de escritura en lotes. Para obtener más información, consulta Cómo modificar datos con operaciones de escritura por lotes.
Insertar filas nuevas en una tabla
C++
Los datos se escriben mediante la función InsertMutationBuilder()
.
Client::Commit()
agrega filas nuevas a una tabla. Todas las inserciones en un solo lote se aplican de forma atómica.
En este código, se muestra cómo escribir los datos:
C#
Puedes insertar datos con el método connection.CreateInsertCommand()
, que crea un SpannerCommand
nuevo para insertar filas en una tabla. El método SpannerCommand.ExecuteNonQueryAsync()
agrega filas nuevas a la tabla.
En este código, se muestra cómo insertar datos:
Go
Escribirás datos con una Mutation
. Una Mutation
es un contenedor para las operaciones de mutación. Un Mutation
representa una secuencia de
actualizaciones, inserciones,
eliminaciones, etc., que se pueden aplicar
filas y tablas diferentes
en una base de datos de Spanner.
Usa Mutation.InsertOrUpdate()
para construir una mutación INSERT_OR_UPDATE
, que agrega una fila nueva o actualiza los valores de la columna si la fila ya existe. También puedes usar el método Mutation.Insert()
para construir una mutación INSERT
, que agrega una fila nueva.
Client.Apply()
aplica mutaciones de forma atómica a una base de datos.
En este código, se muestra cómo escribir los datos:
Java
Escribirás datos con un objeto Mutation
. Un objeto Mutation
es un contenedor para operaciones de mutación. Una Mutation
representa una secuencia de inserciones, actualizaciones y eliminaciones que Spanner aplica de manera atómica a diferentes filas y tablas en una base de datos de Spanner.
El método newInsertBuilder()
en la clase Mutation
genera una mutación INSERT
, que inserta una fila nueva en una tabla. Si la fila ya existe, la escritura falla. Por otro lado,
puedes usar el método newInsertOrUpdateBuilder
para construir una mutación INSERT_OR_UPDATE
, que
actualiza los valores de la columna si la fila ya existe.
El método write()
en la clase DatabaseClient
escribe las mutaciones. Todas las mutaciones en un solo lote se aplican de forma atómica.
En este código, se muestra cómo escribir los datos:
Node.js
Escribe datos con un objeto Table
. El método Table.insert()
agrega filas nuevas a la tabla. Todas las inserciones en un solo lote se aplican de forma atómica.
En este código, se muestra cómo escribir los datos:
PHP
Escribirás datos con el método Database::insertBatch
. insertBatch
agrega filas nuevas a una tabla. Todas las inserciones en un solo lote se aplican de forma atómica.
En este código, se muestra cómo escribir los datos:
Python
Escribirás datos con un objeto Batch
. Un objeto Batch
es un contenedor para operaciones de mutación. Una mutación representa una secuencia de inserciones, actualizaciones, eliminaciones y más secuencias que se pueden aplicar de manera atómica a diferentes filas y tablas en una base de datos de Spanner.
El método insert()
en la clase Batch
se usa para agregar una o más mutaciones de inserción al lote. Todas las mutaciones en un solo lote se aplican de forma atómica.
En este código, se muestra cómo escribir los datos:
Ruby
Escribirás datos con un objeto Client
. El método Client#commit
crea y confirma una transacción para operaciones de escritura que se ejecutan de forma atómica en un único momento lógico a través de las columnas, las filas y las tablas en una base de datos.
En este código, se muestra cómo escribir los datos:
Actualiza filas en una tabla
Supongamos que las ventas de Albums(1, 1)
son más bajas de lo esperado. Como resultado, deseas mover $200,000 del presupuesto de marketing de Albums(2, 2)
a Albums(1, 1)
, pero solo si el dinero está disponible en el presupuesto de Albums(2, 2)
.
Debido a que necesitas leer los datos en las tablas para determinar si debes escribir valores nuevos, debes usar una transacción de lectura y escritura para realizar las operaciones de lectura y escritura de manera atómica.
C++
Usa la función Transaction()
a fin de ejecutar una transacción para un cliente.
Este es el código para ejecutar la transacción:
C#
Para .NET Standard 2.0 (o .NET 4.5) y superior, puedes usar TransactionScope()
de .NET Framework para ejecutar una transacción. Para todas las versiones compatibles de .NET, puedes crear una transacción si estableces el resultado de SpannerConnection.BeginTransactionAsync
como 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 cuerpo de trabajo en el contexto de una transacción de lectura y escritura.
Client.ReadWriteTransaction()
muestra un objeto ReadWriteTransaction
.
En la muestra, se usa ReadWriteTransaction.ReadRow()
para recuperar una fila de datos.
En la muestra, también se usa ReadWriteTransaction.BufferWrite()
, que agrega una lista de mutaciones al conjunto de actualizaciones que se aplicarán cuando se confirme la transacción.
En la muestra, también se usa el tipo Key
, que representa una clave de fila en una tabla o índice de Spanner.
Java
Usa la interfaz TransactionRunner
para ejecutar un cuerpo de trabajo 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
muestra un objeto TransactionRunner
para ejecutar una única transacción lógica.
La clase TransactionRunner.TransactionCallable
contiene un método run()
para realizar un único intento de transacción. run()
toma un objeto TransactionContext
, que es el contexto de una transacción.
En la muestra, se usa la clase Struct
, que es útil para almacenar los resultados de las llamadas readRow()
. En la muestra, también se usa la clase Key
, que representa una clave de fila en una tabla o índice de Spanner.
Este es el código para ejecutar la transacción:
Node.js
Usa Database.runTransaction()
para ejecutar una transacción.
Este es el código para ejecutar la transacción:
PHP
Usa Database::runTransaction
para ejecutar 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:
Borrar filas de una tabla
Cada biblioteca cliente proporciona varias formas de borrar filas:
- Borra todas las filas de una tabla.
- Borra una sola fila mediante la especificación de los valores de la columna de clave para la fila.
- Borra un grupo de filas mediante la creación de un intervalo de claves.
- Borra las filas de una tabla intercalada mediante la eliminación de las filas superiores si la tabla intercalada incluye
ON DELETE CASCADE
en su definición de esquema.
C++
Borra filas mediante la función DeleteMutationBuilder()
para un cliente.
En este código, se muestra cómo borrar los datos:
C#
Borra las filas con el método connection.CreateDeleteCommand()
, que crea un nuevo SpannerCommand
para borrar las filas. El método SpannerCommand.ExecuteNonQueryAsync()
borra las filas de la tabla.
En este ejemplo, se borran las filas de la tabla Singers
de forma individual. Las filas de la tabla Albums
se borran porque la tabla Albums
está intercalada en la tabla Singers
y se define con ON DELETE CASCADE
.
Go
Borra filas con un Mutation
. Usa el método Mutation.Delete()
para construir una mutación DELETE
, que borra una fila. El método Client.Apply()
aplica mutaciones atómicas a la base de datos.
En este ejemplo, se borran las filas de la tabla Albums
de forma individual y, luego, se borran todas las filas de la tabla Singers
con un KeyRange.
Java
Borra las filas con el método Mutation.delete()
.
En este ejemplo, se usa el método KeySet.all()
para borrar todas las filas de la tabla Albums
. Después de eliminar las filas de la tabla Albums
, el ejemplo borra las filas de la tabla Singers
de forma individual mediante claves creadas con el método KeySet.singleKey()
.
Node.js
Borra las filas con el método table.deleteRows()
.
En este ejemplo, se usa el método table.deleteRows()
para borrar todas las filas de la tabla Singers
. Las filas de la tabla Albums
se borran porque la tabla Albums
está intercalada en la tabla Singers
y se define con ON
DELETE CASCADE
.
PHP
Borra filas con Database::delete() method
. La página del método Database::delete()
incluye un ejemplo.
Python
Borra las filas con el método Batch.delete()
.
En este ejemplo, se borran todas las filas de las tablas Albums
y Singers
de forma individual mediante un objeto KeySet
.
Ruby
Borra las filas con el método Client#delete
. La página Client#delete
incluye un ejemplo.