Auf dieser Seite wird beschrieben, wie Sie Daten mithilfe von Mutationen einfügen, aktualisieren und löschen. Eine Mutation stellt eine Folge von Einfügungs-, Aktualisierungs- und Löschvorgängen dar, die Cloud Spanner in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank anwenden kann.
Sie können den Commit von Mutationen zwar mit gRPC oder REST durchführen, meist greift man aber über die Clientbibliotheken auf die APIs zu.
Auf dieser Seite werden die grundlegenden Vorgänge Einfügen, Aktualisieren und Löschen vorgestellt. Weitere Beispiele finden Sie in den Startleitfäden.
Neue Zeilen in eine Tabelle einfügen
C++
Daten werden mit der Funktion InsertMutationBuilder()
geschrieben.
Mit Client::Commit()
fügen Sie einer Tabelle neue Zeilen hinzu. Alle Eingaben in einen einzelnen Batch werden in kleinstmöglichen Schritten angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
C#
Sie können Daten mithilfe der Methode connection.CreateInsertCommand()
einfügen. Dadurch wird ein neuer SpannerCommand
erstellt, um Zeilen in eine Tabelle einzufügen. Die Methode SpannerCommand.ExecuteNonQueryAsync()
fügt der Tabelle neue Zeilen hinzu.
Dieser Code zeigt, wie Daten eingefügt werden:
Go
Sie schreiben Daten mit einer Mutation
. Eine Mutation
ist ein Container für Mutationsvorgänge. Eine Mutation
stellt eine Folge von Einfügungs-, Aktualisierungs- und Löschvorgängen dar, die in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank angewendet werden können.
Verwenden Sie Mutation.InsertOrUpdate()
, um die Mutation INSERT_OR_UPDATE
zu erstellen. Damit wird eine neue Zeile hinzugefügt oder Spaltenwerte aktualisiert, falls die Zeile bereits vorhanden ist. Alternativ können Sie die Methode Mutation.Insert()
zum Erstellen der Mutation INSERT
verwenden, mit der eine neue Zeile hinzugefügt wird.
Durch Client.Apply()
werden Mutationen in kleinstmöglichen Schritten auf eine Datenbank angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
Java
Daten werden mit einem Mutation
-Objekt geschrieben. Ein Mutation
-Objekt ist ein Container für Mutationsvorgänge. Eine Mutation
stellt eine Folge von Einfügungs-, Aktualisierungs- und Löschvorgängen dar, die Cloud Spanner in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank anwenden kann.
Die Methode newInsertBuilder()
in der Klasse Mutation
erstellt eine INSERT
-Mutation, die eine neue Zeile in eine Tabelle einfügt. Wenn die Zeile bereits vorhanden ist, kann der Schreibvorgang nicht durchgeführt werden. In diesem Fall können Sie alternativ mit der Methode newInsertOrUpdateBuilder
die Mutation INSERT_OR_UPDATE
erstellen, um Spaltenwerte zu aktualisieren, wenn die Zeile bereits vorhanden ist.
Die write()
-Methode in der Klasse DatabaseClient
schreibt die Mutationen. Alle Mutationen in einem einzelnen Batch werden in kleinstmöglichen Schritten angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
Node.js
Daten werden mit einem Table
-Objekt geschrieben. Die Methode Table.insert()
fügt der Tabelle neue Zeilen hinzu. Alle Eingaben in einen einzelnen Batch werden in kleinstmöglichen Schritten angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
PHP
Daten werden mithilfe der Methode Database::insertBatch
geschrieben. Mit insertBatch
fügen Sie einer Tabelle neue Zeilen hinzu. Alle Eingaben in einen einzelnen Batch werden in kleinstmöglichen Schritten angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
Python
Daten werden mit einem Batch
-Objekt geschrieben. Ein Batch
-Objekt ist ein Container für Mutationsvorgänge. Eine Mutation stellt eine Folge von Einfügungs-, Aktualisierungs- und Löschvorgängen dar, die in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank angewendet werden können.
Mit der Methode insert()
in der Klasse Batch
werden dem Batch eine oder mehrere Insert-Mutationen hinzugefügt. Alle Mutationen in einem einzelnen Batch werden in kleinstmöglichen Schritten angewendet.
Dieser Code zeigt, wie die Daten geschrieben werden:
Ruby
Daten werden mit einem Client
-Objekt geschrieben. Mit der Methode Client#commit
werden Transaktionen für Schreibvorgänge erstellt, die für Spalten, Zeilen und Tabellen in einer Datenbank zu einem einzigen logischen Zeitpunkt als unteilbarer Vorgang ausgeführt werden. Danach werden sie mit Commits festgeschrieben.
Dieser Code zeigt, wie die Daten geschrieben werden:
Zeilen in einer Tabelle aktualisieren
Angenommen, die Verkaufszahlen für Albums(1, 1)
sind niedriger als erwartet. Sie möchten deshalb 200.000 $ aus dem Marketingbudget von Albums(2, 2)
in Albums(1, 1)
verschieben, wenn das Geld im Budget von Albums(2, 2)
verfügbar ist.
Da Sie die Daten in den Tabellen lesen müssen, um zu bestimmen, ob neue Werte geschrieben werden sollen, sollten Sie zum Ausführen der Lese- und Schreibvorgänge eine Lese-Schreib-Transaktion verwenden.
C++
Verwenden Sie die Funktion Transaction()
, um eine Transaktion für einen Client auszuführen.
Mit diesem Code können Sie die Transaktion ausführen:
C#
Für .NET Standard 2.0 (oder .NET 4.5) und höher können Sie zur Ausführung einer Transaktion den TransactionScope()
des .NET-Frameworks verwenden. Für alle unterstützten .NET-Versionen können Sie eine Transaktion erstellen, indem Sie das Ergebnis von SpannerConnection.BeginTransactionAsync
als das Attribut Transaction
von SpannerCommand
festlegen.
Nachfolgend die zwei Möglichkeiten, die Transaktion auszuführen:
.NET Standard 2.0
.NET Standard 1.5
Go
Verwenden Sie den Typ ReadWriteTransaction
zum Ausführen eines Arbeitsablaufs im Zusammenhang mit einer Lese-Schreib-Transaktion.
Client.ReadWriteTransaction()
gibt ein ReadWriteTransaction
-Objekt zurück.
Im Beispiel wird ReadWriteTransaction.ReadRow()
verwendet, um eine Datenzeile abzurufen.
Im Beispiel wird auch ReadWriteTransaction.BufferWrite()
verwendet, wodurch eine Liste von Mutationen zur Gruppe von Aktualisierungen hinzugefügt wird, die beim Commit der Transaktion angewendet werden.
Außerdem kommt im Beispiel der Typ Key
zum Einsatz, der einen Zeilenschlüssel in einer Cloud Spanner-Tabelle oder einem -Index darstellt.
Java
Verwenden Sie die Schnittstelle TransactionRunner
zum Ausführen eines Arbeitsablaufs im Zusammenhang mit einer Lese-Schreib-Transaktion. Diese Schnittstelle enthält die Methode run()
, mit der Sie eine Lese-Schreib-Transaktion und gegebenenfalls deren Wiederholungen ausführen. Die Methode readWriteTransaction
der Klasse DatabaseClient
gibt ein TransactionRunner
-Objekt zum Ausführen einer einzelnen logischen Transaktion zurück.
Die Klasse TransactionRunner.TransactionCallable
enthält eine run()
-Methode zum Ausführen eines einzelnen Transaktionsversuchs. run()
verwendet ein TransactionContext
-Objekt, das ein Kontext für eine Transaktion ist.
Im Beispiel wird die Klasse Struct
verwendet, die sich gut zum Speichern der Ergebnisse der readRow()
-Aufrufe eignet. Außerdem kommt im Beispiel die Klasse Key
zum Einsatz, die einen Zeilenschlüssel in einer Cloud Spanner-Tabelle oder einem -Index darstellt.
Mit diesem Code können Sie die Transaktion ausführen:
Node.js
Verwenden Sie Database.runTransaction()
, um eine Transaktion auszuführen.
Mit diesem Code können Sie die Transaktion ausführen:
PHP
Verwenden Sie Database::runTransaction
, um eine Transaktion auszuführen.
Mit diesem Code können Sie die Transaktion ausführen:
Python
Verwenden Sie die Methode run_in_transaction()
der Klasse Database
, um eine Transaktion auszuführen.
Mit diesem Code können Sie die Transaktion ausführen:
Ruby
Verwenden Sie die Methode transaction
der Klasse Client
, um eine Transaktion auszuführen.
Mit diesem Code können Sie die Transaktion ausführen:
Zeilen in einer Tabelle löschen
Jede Clientbibliothek stellt mehrere Möglichkeiten zum Löschen von Zeilen bereit:
- Alle Zeilen in einer Tabelle löschen
- Eine einzelne Zeile löschen, wenn Key-Spaltenwerte für die Zeile angegeben werden
- Eine Gruppe von Zeilen löschen, wenn ein Schlüsselbereich erstellt wird
- Zeilen in einer verschränkten Tabelle löschen, wenn die übergeordneten Zeilen gelöscht werden, falls die verschränkte Tabelle
ON DELETE CASCADE
in ihrer Schemadefinition enthält
C++
Löschen Sie Zeilen mit der Funktion DeleteMutationBuilder()
für einen Client.
Dieser Code zeigt, wie die Daten gelöscht werden:
C#
Löschen Sie Zeilen mit der Methode connection.CreateDeleteCommand()
. Diese erstellt einen neuen SpannerCommand
, um Zeilen zu löschen. Mit der Methode SpannerCommand.ExecuteNonQueryAsync()
werden die Zeilen aus der Tabelle gelöscht.
In diesem Beispiel werden die Zeilen in der Tabelle Singers
einzeln gelöscht. Die Zeilen in der Tabelle Albums
werden gelöscht, da die Tabelle Albums
mit der Tabelle Singers
verschränkt und mit ON DELETE CASCADE
definiert ist.
Go
Zeilen können mit Mutation
gelöscht werden. Verwenden Sie dabei die Methode Mutation.Delete()
zum Erstellen einer DELETE
-Mutation, wodurch eine Zeile gelöscht wird. Die Methode Client.Apply()
wendet Mutationen in kleinstmöglichen Schritten auf die Datenbank an.
In diesem Beispiel werden die Zeilen in der Tabelle Albums
einzeln gelöscht. Anschließend werden alle Zeilen in der Tabelle Singers
mit KeyRange gelöscht.
Java
Zeilen können mit der Methode Mutation.delete()
gelöscht werden.
In diesem Beispiel werden mithilfe der Methode KeySet.all()
alle Zeilen in der Tabelle Albums
gelöscht. Nachdem die Zeilen in der Tabelle Albums
gelöscht wurden, werden in diesem Beispiel die Zeilen aus der Tabelle Singers
einzeln gelöscht. Dabei werden Schlüssel verwendet, die mit der Methode KeySet.singleKey()
erstellt wurden.
Node.js
Zeilen können mit der Methode table.deleteRows()
gelöscht werden.
In diesem Beispiel werden mit der Methode table.deleteRows()
alle Zeilen aus der Tabelle Singers
gelöscht. Die Zeilen in der Tabelle Albums
werden gelöscht, da die Tabelle Albums
mit der Tabelle Singers
verschränkt und mit ON
DELETE CASCADE
definiert ist.
PHP
Zeilen können mit Database::delete() method
gelöscht werden. Auf der Seite für die Methode Database::delete()
finden Sie ein Beispiel.
Python
Zeilen können mit der Methode Batch.delete()
gelöscht werden.
In diesem Beispiel werden alle Zeilen in den Tabellen Albums
und Singers
mit einem KeySet
-Objekt einzeln gelöscht.
Ruby
Zeilen können mit der Methode Client#delete
gelöscht werden. Auf der Seite Client#delete
finden Sie ein Beispiel.