Halaman ini menjelaskan cara menyisipkan, memperbarui, dan menghapus data menggunakan mutasi. Mutasi mewakili urutan penyisipan, pembaruan, dan penghapusan yang diterapkan secara atomik ke berbagai baris dan tabel di database Spanner.
Meskipun Anda dapat melakukan mutasi dengan menggunakan gRPC atau REST, API melalui library klien akan lebih umum diakses.
Halaman ini menunjukkan tugas dasar menyisipkan, memperbarui, dan menghapus. Anda dapat menemukan contoh lainnya di Tutorial memulai.
Jika perlu melakukan commit dalam jumlah besar buta tulis, tetapi tidak memerlukan transaksi atomik, Anda dapat mengubah tabel Spanner secara massal menggunakan batch operasi tulis. Untuk mengetahui informasi selengkapnya, lihat Memodifikasi data menggunakan batch operasi tulis.
Menyisipkan baris baru dalam tabel
C++
Anda menulis data menggunakan fungsi InsertMutationBuilder()
.
Client::Commit()
menambahkan baris baru ke tabel. Semua penyisipan dalam
satu batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
C#
Anda dapat menyisipkan data menggunakan
metode connection.CreateInsertCommand()
, yang
membuat SpannerCommand
baru untuk menyisipkan baris ke dalam tabel. Metode
SpannerCommand.ExecuteNonQueryAsync()
menambahkan baris
baru ke tabel.
Kode ini menunjukkan cara menyisipkan data:
Go
Anda menulis data menggunakan
Mutation
. Mutation
adalah container untuk operasi mutasi. Mutation
mewakili urutan
penyisipan, pembaruan, penghapusan, dan sebagainya yang dapat diterapkan secara atomik ke
berbagai baris dan tabel dalam database Spanner.
Gunakan Mutation.InsertOrUpdate()
untuk membuat mutasi INSERT_OR_UPDATE
, yang menambahkan baris baru atau memperbarui
nilai kolom jika baris sudah ada. Atau, gunakan
metode Mutation.Insert()
untuk membuat mutasi INSERT
, yang menambahkan baris baru.
Client.Apply()
menerapkan mutasi secara atomik ke database.
Kode ini menunjukkan cara menulis data:
Java
Anda menulis data menggunakan objek Mutation
. Objek Mutation
adalah penampung untuk operasi mutasi. Mutation
merepresentasikan
urutan penyisipan, pembaruan, dan penghapusan yang diterapkan Spanner
secara atomik ke berbagai baris dan tabel di database Spanner.
Metode newInsertBuilder()
di class Mutation
membuat mutasi INSERT
, yang menyisipkan baris
baru dalam tabel. Jika baris sudah ada, penulisan akan gagal. Atau,
Anda dapat menggunakan metode newInsertOrUpdateBuilder
untuk membuat mutasi INSERT_OR_UPDATE
, yang
memperbarui nilai kolom jika baris sudah ada.
Metode write()
di class DatabaseClient
menulis
mutasi. Semua mutasi dalam satu batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Node.js
Anda menulis data menggunakan
objek Table
. Metode
Table.insert()
menambahkan baris baru ke tabel. Semua penyisipan dalam satu batch diterapkan
secara atomik.
Kode ini menunjukkan cara menulis data:
PHP
Anda menulis data menggunakan metode Database::insertBatch
. insertBatch
menambahkan baris baru ke tabel. Semua penyisipan dalam satu tumpukan diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Python
Anda menulis data menggunakan objek Batch
. Objek Batch
adalah container untuk operasi mutasi. Mutasi mewakili urutan
penyisipan, pembaruan, penghapusan, dan sebagainya yang dapat diterapkan secara atomik ke
baris dan tabel yang berbeda di database Spanner.
Metode insert()
di class Batch
digunakan untuk
menambahkan satu atau beberapa mutasi penyisipan ke batch. Semua mutasi dalam satu tumpukan diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Ruby
Anda menulis data menggunakan
objek
Client
. Metode Client#commit
membuat dan meng-commit transaksi untuk penulisan yang berjalan secara atomik pada satu waktu logis di seluruh kolom, baris, dan tabel dalam suatu database.
Kode ini menunjukkan cara menulis data:
Memperbarui baris dalam tabel
Misalkan penjualan Albums(1, 1)
lebih rendah dari yang diharapkan. Akibatnya, Anda
ingin memindahkan $200.000 dari anggaran pemasaran sebesar Albums(2, 2)
ke
Albums(1, 1)
, tetapi hanya jika dana tersebut tersedia dalam anggaran sebesar
Albums(2, 2)
.
Karena perlu membaca data dalam tabel untuk menentukan apakah akan menulis nilai baru atau tidak, Anda harus menggunakan transaksi baca-tulis untuk melakukan pembacaan dan penulisan secara atomik.
C++
Gunakan fungsi Transaction()
untuk menjalankan transaksi untuk klien.
Berikut adalah kode untuk menjalankan transaksi:
C#
Untuk .NET Standard 2.0 (atau .NET 4.5) dan yang lebih baru, Anda dapat menggunakan
TransactionScope()
framework .NET untuk menjalankan transaksi. Untuk semua versi .NET
yang didukung, Anda dapat membuat transaksi dengan menetapkan hasil
SpannerConnection.BeginTransactionAsync
sebagai properti Transaction
dari
SpannerCommand
.
Berikut adalah dua cara untuk menjalankan transaksi:
.NET Standard 2.0
.NET Standard 1.5
Go
Gunakan jenis ReadWriteTransaction
untuk menjalankan isi tugas dalam konteks transaksi baca-tulis.
Client.ReadWriteTransaction()
menampilkan objek ReadWriteTransaction
.
Contoh ini menggunakan ReadWriteTransaction.ReadRow()
untuk mengambil satu baris data.
Contoh ini juga menggunakan ReadWriteTransaction.BufferWrite()
,
yang menambahkan daftar mutasi ke kumpulan update yang akan diterapkan
saat transaksi di-commit.
Contoh ini juga menggunakan jenis Key
, yang mewakili row key dalam tabel atau indeks Spanner.
Java
Gunakan antarmuka TransactionRunner
untuk menjalankan
isi tugas dalam konteks transaksi baca-tulis. Antarmuka ini
berisi metode run()
, yang digunakan untuk menjalankan transaksi baca
tulis, dengan percobaan ulang sesuai kebutuhan. Metode
readWriteTransaction
dari class DatabaseClient
menampilkan objek TransactionRunner
untuk mengeksekusi satu transaksi
logis.
Class TransactionRunner.TransactionCallable
berisi metode run()
untuk melakukan satu upaya transaksi. run()
mengambil
objek TransactionContext
, yang merupakan konteks
untuk transaksi.
Contoh ini menggunakan class Struct
, yang berguna untuk
menyimpan hasil panggilan readRow()
. Contoh ini juga menggunakan
class Key
, yang mewakili row key dalam tabel
atau indeks Spanner.
Berikut adalah kode untuk menjalankan transaksi:
Node.js
Gunakan Database.runTransaction()
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
PHP
Gunakan Database::runTransaction
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
Python
Gunakan metode run_in_transaction()
dari class Database
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
Ruby
Gunakan metode transaction
dari class Client
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
Menghapus baris dalam tabel
Setiap library klien menyediakan beberapa cara untuk menghapus baris:
- Menghapus semua baris dalam tabel.
- Hapus satu baris dengan menentukan nilai kolom utama untuk baris tersebut.
- Hapus sekelompok baris dengan membuat rentang kunci.
- Hapus baris dalam tabel sisipan dengan menghapus baris induk, jika
tabel yang disisipkan menyertakan
ON DELETE CASCADE
dalam definisi skemanya.
C++
Hapus baris menggunakan fungsi DeleteMutationBuilder()
untuk klien.
Kode ini menunjukkan cara menghapus data:
C#
Hapus baris menggunakan metode connection.CreateDeleteCommand()
, yang membuat SpannerCommand
baru untuk menghapus baris. Metode
SpannerCommand.ExecuteNonQueryAsync()
menghapus
baris dari tabel.
Contoh ini menghapus baris dalam tabel Singers
satu per satu. Baris
dalam tabel Albums
dihapus karena tabel Albums
disisipkan
dalam tabel Singers
dan ditentukan dengan ON DELETE CASCADE
.
Go
Hapus baris menggunakan Mutation
. Gunakan
metode Mutation.Delete()
untuk membuat mutasi DELETE
,
yang menghapus baris. Metode Client.Apply()
menerapkan
mutasi secara atomik ke database.
Contoh ini menghapus baris dalam tabel Albums
satu per satu, lalu
menghapus semua baris dalam tabel Singers
menggunakan KeyRange.
Java
Hapus baris menggunakan metode Mutation.delete()
.
Contoh ini menggunakan metode KeySet.all()
untuk menghapus semua baris dalam tabel Albums
. Setelah menghapus baris dalam tabel Albums
, contoh ini akan menghapus baris dalam tabel Singers
satu per satu menggunakan kunci yang dibuat dengan metode KeySet.singleKey()
.
Node.js
Hapus baris menggunakan metode table.deleteRows()
.
Contoh ini menggunakan metode table.deleteRows()
untuk menghapus semua baris
dari tabel Singers
. Baris dalam tabel Albums
dihapus karena
tabel Albums
disisipkan dalam tabel Singers
dan ditentukan dengan ON
DELETE CASCADE
.
PHP
Hapus baris menggunakan Database::delete() method
. Halaman
metode Database::delete()
menyertakan contoh.
Python
Hapus baris menggunakan metode Batch.delete()
.
Contoh ini menghapus semua baris dalam tabel Albums
dan Singers
satu per satu menggunakan objek KeySet
.
Ruby
Hapus baris menggunakan metode Client#delete
. Halaman
Client#delete
menyertakan contoh.