Driver JDBC Spanner (Konektivitas Database Java) mendukung pernyataan pengelolaan sesi, yang memungkinkan Anda mengubah status koneksi, menjalankan transaksi, dan menjalankan batch pernyataan secara efisien.
Perintah berikut berlaku untuk database dialek PostgreSQL.
Pernyataan koneksi
Pernyataan berikut mengubah atau menampilkan properti koneksi saat ini.
SPANNER.READONLY
Boolean yang menunjukkan apakah koneksi berada dalam mode hanya-baca atau tidak. Defaultnya
adalah false
.
SHOW [VARIABLE] SPANNER.READONLY
SET SPANNER.READONLY {TO|=} { true | false }
Anda dapat mengubah nilai properti ini hanya jika tidak ada transaksi aktif.
▶ Contoh: Transaksi hanya baca (Klik untuk meluaskan)
Contoh berikut menunjukkan cara menggunakan properti ini untuk menjalankan transaksi
hanya baca di Spanner.
SET SPANNER.READONLY = TRUE;
-- This transaction is a read-only transaction.
BEGIN TRANSACTION;
-- The following two queries both use the read-only transaction.
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SELECT Title
FROM Albums
ORDER BY Title;
-- This shows the read timestamp that was used for the two queries.
SHOW SPANNER.READ_TIMESTAMP;
-- This marks the end of the read-only transaction. The next statement starts
-- a new read-only transaction.
COMMIT;
KOMITMEN OTOMATIS
Boolean yang menunjukkan apakah koneksi berada dalam mode autocommit atau tidak. Defaultnya
adalah true
.
SHOW [VARIABLE] AUTOCOMMIT
SET AUTOCOMMIT {TO|=} { true | false }
Anda dapat mengubah nilai properti ini hanya jika tidak ada transaksi aktif.
Jika AUTOCOMMIT
disetel ke salah (false), transaksi baru akan otomatis dimulai setelah Anda mengeksekusi COMMIT
atau ROLLBACK
. Pernyataan pertama yang Anda jalankan
akan memulai transaksi.
▶ Contoh: Commit otomatis (Klik untuk meluaskan)
Contoh berikut menunjukkan cara menggunakan properti autocommit
.
-- The default value for AUTOCOMMIT is true.
SHOW AUTOCOMMIT;
-- This insert statement is automatically committed after it is executed, as
-- the connection is in autocommit mode.
INSERT INTO T (id, col_a, col_b) VALUES (1, 100, 1);
-- Turning off autocommit means that a new transaction is automatically started
-- when the next statement is executed.
SET AUTOCOMMIT = FALSE;
-- The following statement starts a new transaction.
INSERT INTO T (id, col_a, col_b) VALUES (2, 200, 2);
-- This statement uses the same transaction as the previous statement.
INSERT INTO T (id, col_a, col_b) VALUES (3, 300, 3);
-- Commit the current transaction with the two INSERT statements.
COMMIT;
-- Transactions can also be executed in autocommit mode by executing the BEGIN
-- statement.
SET AUTOCOMMIT = FALSE;
-- Execute a transaction while in autocommit mode.
BEGIN;
INSERT INTO T (id, col_a, col_b) VALUES (4, 400, 4);
INSERT INTO T (id, col_a, col_b) VALUES (5, 500, 5);
COMMIT;
SPANNER.RETRY_ABORTS_INTERNALLY
Boolean yang menunjukkan apakah koneksi otomatis mencoba ulang transaksi yang dibatalkan. Nilai defaultnya adalah true
.
SHOW [VARIABLE] SPANNER.RETRY_ABORTS_INTERNALLY
SET SPANNER.RETRY_ABORTS_INTERNALLY {TO|=} { true | false }
Anda dapat mengubah nilai properti ini hanya setelah transaksi dimulai (lihat BEGIN TRANSACTION
) dan sebelum pernyataan apa pun dijalankan dalam transaksi.
Jika Anda menyetel SPANNER.RETRY_ABORTS_INTERNALLY
ke benar (true), koneksi akan menyimpan
checksum semua data yang dikembalikan koneksi ke aplikasi klien. Metode ini
digunakan untuk mencoba kembali transaksi jika dibatalkan oleh Spanner.
Nilai defaultnya adalah true
. Sebaiknya tetapkan nilai ini ke false
jika
aplikasi Anda sudah mencoba ulang transaksi yang dibatalkan.
SPANNER.AUTOCOMMIT_DML_MODE
Properti STRING
yang menunjukkan mode autocommit untuk
pernyataan Bahasa Manipulasi Data (DML).
SHOW [VARIABLE] SPANNER.AUTOCOMMIT_DML_MODE
SET SPANNER.AUTOCOMMIT_DML_MODE {TO|=} { 'TRANSACTIONAL' | 'PARTITIONED_NON_ATOMIC' }
Kemungkinan nilainya adalah:
- Dalam mode
TRANSACTIONAL
, driver mengeksekusi pernyataan DML sebagai transaksi atomik terpisah. Driver membuat transaksi baru, mengeksekusi pernyataan DML, lalu meng-commit transaksi setelah eksekusi berhasil atau me-roll back transaksi jika terjadi error. - Dalam mode
PARTITIONED_NON_ATOMIC
, driver akan mengeksekusi pernyataan DML sebagai pernyataan update yang dipartisi. Pernyataan update yang terpartisi dapat dijalankan sebagai serangkaian banyak transaksi, yang masing-masing mencakup sebagian baris yang terpengaruh. Pernyataan yang dipartisi memberikan semantik yang lemah sebagai imbalan atas skalabilitas dan performa yang lebih baik.
Nilai defaultnya adalah TRANSACTIONAL
.
▶ Contoh: DML yang dipartisi (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi
DML Terpartisi menggunakan
driver JDBC Spanner.
-- Change autocommit DML mode to use Partitioned DML.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'PARTITIONED_NON_ATOMIC';
-- Delete all singers that have been marked as inactive.
-- This statement is executed using Partitioned DML.
DELETE
FROM singers
WHERE active=false;
-- Change DML mode back to standard `TRANSACTIONAL`.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'TRANSACTIONAL';
STATEMENT_TIMEOUT
Properti jenis STRING
yang menunjukkan nilai waktu tunggu untuk pernyataan saat ini.
SHOW [VARIABLE] STATEMENT_TIMEOUT
SET STATEMENT_TIMEOUT {TO|=} { '<int8>{ s | ms | us | ns }' | <int8> | DEFAULT }
Nilai int8
adalah bilangan bulat yang diikuti dengan akhiran yang menunjukkan satuan
waktu. DEFAULT
berarti 0 detik, yang setara dengan tanpa waktu tunggu. Angka int8
tanpa unit menunjukkan md. Jika nilai waktu tunggu pernyataan telah ditetapkan, pernyataan yang memakan waktu lebih lama dari nilai waktu tunggu yang ditetapkan akan menyebabkan error java.sql.SQLTimeoutException
dan membatalkan transaksi.
Satuan waktu yang didukung adalah:
s
: detikms
: milidetikus
: mikrodetikns
: nanodetik
Defaultnya adalah 0, yang berarti tidak ada waktu tunggu.
Waktu tunggu pernyataan selama transaksi akan membatalkan transaksi, semua
pernyataan berikutnya dalam transaksi yang tidak valid (kecuali ROLLBACK
) gagal,
dan driver JDBC Spanner akan menampilkan java.sql.SQLTimeoutException
.
SPANNER.READ_ONLY_STALENESS
Properti jenis STRING
yang menunjukkan setelan penghentian hanya baca saat ini yang digunakan Spanner untuk transaksi dan kueri hanya baca dalam mode AUTOCOMMIT
.
SHOW [VARIABLE] SPANNER.READ_ONLY_STALENESS SET SPANNER.READ_ONLY_STALENESS {TO|=} staleness_type staleness_type: { 'STRONG' | 'MIN_READ_TIMESTAMP timestamp' | 'READ_TIMESTAMP timestamp' | 'MAX_STALENESS <int8>{ s | ms | us | ns }' | 'EXACT_STALENESS <int8>{ s | ms | us | ns }' }
Nilai basi hanya baca berlaku untuk semua transaksi hanya baca berikutnya dan untuk semua kueri dalam mode AUTOCOMMIT
.
Nilai defaultnya adalah STRONG
.
Opsi terikat stempel waktu adalah sebagai berikut:
STRONG
memberi tahu Spanner untuk melakukan pembacaan yang kuat.MAX_STALENESS
menentukan interval waktu yang digunakan Spanner untuk melakukan pembacaan penghentian yang dibatasi, relatif terhadapnow()
.MIN_READ_TIMESTAMP
menentukan waktu absolut yang digunakan Spanner untuk melakukan pembacaan penghentian yang dibatasi.EXACT_STALENESS
menentukan interval waktu yang digunakan Spanner untuk melakukan pembacaan penghentian yang tepat, relatif terhadapnow()
.READ_TIMESTAMP
menentukan waktu absolut yang digunakan Spanner untuk melakukan pembacaan penghentian yang tepat.
Stempel waktu harus menggunakan format berikut:
YYYY-[M]M-[D]DT[[H]H:[M]M:[S]S[.DDDDDD]][timezone]
Satuan waktu yang didukung untuk menetapkan nilai MAX_STALENESS
dan EXACT_STALENESS
adalah:
s
: detikms
: milidetikus
: mikrodetikns
: nanodetik
Anda dapat mengubah nilai properti ini hanya saat tidak ada transaksi aktif.
▶ Contoh: Status hanya baca yang tidak berlaku (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi kueri menggunakan nilai data
penghentian kustom dengan driver JDBC Spanner.
-- Set the read-only staleness to MAX_STALENESS 10 seconds.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 10s';
-- Execute a query in auto-commit mode. This returns results that are up to
-- 10 seconds stale.
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Read-only staleness can also be applied to read-only transactions.
-- MAX_STALENESS is only allowed for queries in autocommit mode.
-- Change the staleness to EXACT_STALENESS and start a read-only transaction.
SET SPANNER.READ_ONLY_STALENESS = 'EXACT_STALENESS 10s';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SELECT Title, SingerId
FROM Albums
ORDER BY Title;
COMMIT;
-- Set the read staleness to an exact timestamp.
SET SPANNER.READ_ONLY_STALENESS = 'READ_TIMESTAMP 2024-01-26T10:36:00Z';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.OPTIMIZER_VERSION
Properti jenis STRING
yang menunjukkan versi pengoptimal. Versi ini
adalah bilangan bulat atau 'LATEST
'.
SHOW [VARIABLE] SPANNER.OPTIMIZER_VERSION
SET SPANNER.OPTIMIZER_VERSION {TO|=} { 'version'|'LATEST'|'' }
Menetapkan versi pengoptimal yang akan digunakan untuk semua pernyataan berikut pada
koneksi. Jika versi pengoptimal ditetapkan ke ''
(string kosong), Spanner akan menggunakan versi terbaru. Jika tidak ada versi pengoptimal yang ditetapkan,
Spanner akan menggunakan versi pengoptimal yang ditetapkan pada
level database.
Nilai defaultnya adalah ''
.
▶ Contoh: Versi pengoptimalan (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi kueri menggunakan
versi pengoptimal tertentu dengan
driver JDBC Spanner.
-- Set the optimizer version to 5 and execute a query.
SET SPANNER.OPTIMIZER_VERSION = '5';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Execute the same query with the latest optimizer version.
SET SPANNER.OPTIMIZER_VERSION = 'LATEST';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Revert back to using the default optimizer version that has been set for the
-- database.
SET SPANNER.OPTIMIZER_VERSION = '';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.OPTIMIZER_STATISTICS_PACKAGE
Properti jenis STRING
yang menunjukkan paket statistik pengoptimal saat ini yang digunakan oleh koneksi ini.
SHOW [VARIABLE] SPANNER.OPTIMIZER_STATISTICS_PACKAGE
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE {TO|=} { 'package'|'' }
Menetapkan paket statistik pengoptimal yang akan digunakan untuk semua pernyataan berikut pada
koneksi. <package>
harus berupa nama paket yang valid. Jika tidak ada paket statistik pengoptimal
yang ditetapkan, Spanner akan menggunakan paket statistik
pengoptimal yang ditetapkan di tingkat database.
Nilai defaultnya adalah ''
.
▶ Contoh: Paket statistik Pengoptimal (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi kueri menggunakan
paket statistik pengoptimal tertentu dengan
driver JDBC Spanner.
-- Show the available optimizer statistics packages in this database.
SELECT * FROM INFORMATION_SCHEMA.SPANNER_STATISTICS;
-- Set the optimizer statistics package and execute a query.
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE = 'auto_20240124_06_47_29UTC';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Execute the same query with the default optimizer statistics package.
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE = '';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.RETURN_COMMIT_STATS
Properti jenis BOOL
yang menunjukkan apakah statistik harus ditampilkan untuk transaksi pada koneksi ini. Anda dapat melihat statistik yang ditampilkan dengan menjalankan perintah SHOW SPANNER.COMMIT_RESPONSE
.
SHOW [VARIABLE] SPANNER.RETURN_COMMIT_STATS
SET SPANNER.RETURN_COMMIT_STATS {TO|=} { true | false }
Nilai defaultnya adalah false
.
▶ Contoh: Statistik komitmen (Klik untuk meluaskan)
Contoh berikut menunjukkan cara melihat statistik commit untuk transaksi dengan driver JDBC Spanner.
-- Enable the returning of commit stats.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
COMMIT;
-- View the commit response with the transaction statistics for the last
-- transaction that was committed.
SHOW SPANNER.COMMIT_RESPONSE;
SPANNER.RPC_PRIORITY
Properti jenis STRING
yang menunjukkan prioritas relatif untuk
permintaan Spanner. Prioritas berfungsi sebagai petunjuk bagi
penjadwal Spanner dan tidak menjamin urutan eksekusi.
SHOW [VARIABLE] SPANNER.RPC_PRIORITY
SET SPANNER.RPC_PRIORITY = {'HIGH'|'MEDIUM'|'LOW'|'NULL'}
'NULL'
berarti tidak ada petunjuk yang harus disertakan dalam permintaan.
Nilai defaultnya adalah 'NULL'
.
Untuk informasi selengkapnya, lihat Priority
.
Tag
Pernyataan berikut mengelola tag permintaan dan transaksi.
SPANNER.STATEMENT_TAG
Properti jenis STRING
yang berisi tag permintaan untuk pernyataan berikutnya.
SHOW [VARIABLE] SPANNER.STATEMENT_TAG
SET SPANNER.STATEMENT_TAG {TO|=} 'tag-name'
Menetapkan tag permintaan untuk pernyataan berikutnya yang akan dieksekusi. Hanya satu tag yang dapat ditetapkan per pernyataan. Tag tidak mencakup beberapa pernyataan; tag harus ditetapkan per pernyataan. Tag permintaan dapat dihapus dengan menyetelnya
ke string kosong (''
).
Nilai defaultnya adalah ''
.
Anda dapat menetapkan tag transaksi dan tag pernyataan untuk pernyataan yang sama.
Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah dengan tag permintaan dan tag transaksi.
▶ Contoh: Tag pernyataan (Klik untuk meluaskan)
Contoh berikut menunjukkan cara menetapkan tag pernyataan dengan
driver JDBC Spanner.
-- Set the statement tag that should be included with the next statement.
SET SPANNER.STATEMENT_TAG = 'tag1';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'tag2';
SELECT Title
FROM Albums
ORDER BY Title;
SPANNER.TRANSACTION_TAG
Properti jenis STRING
yang berisi tag transaksi untuk transaksi
berikutnya.
SHOW [VARIABLE] SPANNER.TRANSACTION_TAG
SET SPANNER.TRANSACTION_TAG {TO|=} 'tag-name'
Menetapkan tag transaksi untuk transaksi saat ini yang akan dieksekusi. Hanya satu tag yang dapat ditetapkan per transaksi. Tag tidak mencakup beberapa transaksi, tag harus ditetapkan per transaksi. Tag transaksi dapat dihapus dengan menetapkannya ke string kosong (''
). Tag transaksi harus ditetapkan sebelum pernyataan apa pun dieksekusi dalam transaksi.
Nilai defaultnya adalah ''
.
Anda dapat menetapkan tag transaksi dan tag pernyataan untuk pernyataan yang sama.
Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah dengan tag permintaan dan tag transaksi.
▶ Contoh: Tag transaksi (Klik untuk meluaskan)
Contoh berikut menunjukkan cara menetapkan tag transaksi dengan
driver JDBC Spanner.
BEGIN;
-- Set the transaction tag for the current transaction.
SET SPANNER.TRANSACTION_TAG = 'transaction-tag-1';
-- Set the statement tag that should be included with the next statement.
-- The statement will include both the statement tag and the transaction tag.
SET SPANNER.STATEMENT_TAG = 'select-statement';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'insert-statement';
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- The transaction tag property is cleared when the transaction finishes.
SHOW SPANNER.TRANSACTION_TAG;
Pernyataan transaksi
Pernyataan berikut mengelola dan melakukan commit transaksi Spanner.
TINGKAT ISOLASI TRANSAKSI
SHOW [VARIABLE] TRANSACTION ISOLATION LEVEL
Menampilkan kumpulan hasil dengan satu baris dan satu kolom jenis STRING
. Nilai yang ditampilkan selalu serializable
.
SPANNER.READ_TIMESTAMP
SHOW [VARIABLE] SPANNER.READ_TIMESTAMP
Menampilkan kumpulan hasil dengan satu baris dan satu kolom jenis TIMESTAMP
yang berisi stempel waktu baca dari transaksi hanya baca terbaru. Pernyataan ini
menampilkan stempel waktu hanya saat transaksi hanya baca masih aktif dan
telah mengeksekusi setidaknya satu kueri, atau segera setelah transaksi hanya baca
di-commit dan sebelum transaksi baru dimulai. Jika tidak, hasilnya adalah NULL
.
▶ Contoh: Membaca stempel waktu (Klik untuk meluaskan)
Contoh berikut menunjukkan cara melihat stempel waktu terakhir dibaca untuk
operasi hanya baca dengan driver JDBC Spanner.
-- Execute a query in autocommit mode using the default read-only staleness
-- (strong).
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp that was used for the previous query.
SHOW SPANNER.READ_TIMESTAMP;
-- Set a non-deterministic read-only staleness and execute the same query.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 20s';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp that was used for the previous query. The timestamp
-- is determined by Spanner, and is guaranteed to be no less than
-- 20 seconds stale.
SHOW SPANNER.READ_TIMESTAMP;
-- The read timestamp of a read-only transaction can also be retrieved.
SET SPANNER.READ_ONLY_STALENESS = 'STRONG';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp of the current read-only transaction. All queries in
-- this transaction will use this read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
SELECT Title
FROM Albums
ORDER BY Title;
-- The read timestamp is the same as for the previous query, as all queries in
-- the same transaction use the same read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
COMMIT;
SPANNER.COMMIT_TIMESTAMP
SHOW [VARIABLE] SPANNER.COMMIT_TIMESTAMP
Menampilkan kumpulan hasil dengan satu baris dan satu kolom dari jenis TIMESTAMP
yang berisi
stempel waktu commit dari transaksi baca-tulis terakhir yang
di-commit Spanner. Pernyataan ini menampilkan stempel waktu hanya saat
Anda mengeksekusinya setelah meng-commit transaksi baca-tulis dan sebelum Anda mengeksekusi
pernyataan SELECT
, DML
, atau perubahan skema berikutnya. Jika tidak, hasilnya adalah NULL
.
▶ Contoh: Commit stempel waktu (Klik untuk meluaskan)
Contoh berikut menunjukkan cara melihat stempel waktu commit terakhir untuk
operasi tulis dengan driver JDBC Spanner.
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_TIMESTAMP;
SPANNER.COMMIT_RESPONSE
SHOW [VARIABLE] SPANNER.COMMIT_RESPONSE
Menampilkan kumpulan hasil dengan satu baris dan dua kolom:
COMMIT_TIMESTAMP
(type=TIMESTAMP
) menunjukkan kapan transaksi terbaru dilakukan.MUTATION_COUNT
(type=INT64
) menunjukkan jumlah mutasi yang diterapkan dalam transaksi yang di-commit. Nilai ini selalu kosong saat dieksekusi di emulator.
Jumlah mutasi hanya tersedia jika SET SPANNER.RETURN_COMMIT_STATS
ditetapkan ke true
sebelum commit transaksi.
▶ Contoh: Commit respons (Klik untuk meluaskan)
Contoh berikut menunjukkan cara melihat respons commit terakhir untuk
operasi tulis dengan driver JDBC Spanner.
-- Enable returning commit stats in addition to the commit timestamp.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_RESPONSE;
{ MULAI | MULAI } [ TRANSAKSI | BEKERJA ]
{ START | BEGIN } [ TRANSACTION | WORK ] [{ READ ONLY | READ WRITE }]
Memulai transaksi baru. Kata kunci TRANSACTION
dan WORK
bersifat opsional, setara, dan tidak berpengaruh.
- Gunakan
COMMIT
atauROLLBACK
untuk menghentikan transaksi. - Jika Anda telah mengaktifkan mode
AUTOCOMMIT
, pernyataan ini untuk sementara mengeluarkan koneksi dari modeAUTOCOMMIT
. Koneksi kembali ke modeAUTOCOMMIT
saat transaksi berakhir. - Jika
READ ONLY
atauREAD WRITE
tidak ditentukan, mode transaksi ditentukan oleh mode transaksi default sesi tersebut. Default ini ditetapkan menggunakan perintahSET SESSION CHARACTERISTICS AS TRANSACTION
, atau dengan menetapkan variabelREADONLY
.
Anda hanya dapat mengeksekusi pernyataan ini jika tidak ada transaksi aktif.
▶ Contoh: MULAI TRANSAKSI (Klik untuk meluaskan)
Contoh berikut menunjukkan cara memulai berbagai jenis transaksi dengan
driver JDBC Spanner.
-- This starts a transaction using the current defaults of this connection.
-- The value of READONLY determines whether the transaction is a
-- read-write or a read-only transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Set READONLY to TRUE to use read-only transactions by default.
SET READONLY=TRUE;
-- This starts a read-only transaction.
BEGIN;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
-- Add 'READ WRITE' or 'READ ONLY' to the 'BEGIN' command to
-- override the current default of the connection.
SET READONLY=FALSE;
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
BERKOMITMEN [TRANSAKSI | KANTOR]
COMMIT [ TRANSACTION | WORK ]
Melakukan transaksi saat ini. Kata kunci TRANSACTION
dan WORK
bersifat
opsional dan setara, serta tidak berpengaruh.
- Melakukan transaksi baca-tulis akan membuat semua update transaksi ini terlihat oleh transaksi lain dan melepaskan semua kunci transaksi di Spanner.
- Mengikat transaksi hanya-baca akan mengakhiri transaksi hanya-baca saat ini. Setiap pernyataan berikutnya akan memulai transaksi baru. Tidak ada perbedaan semantik antara
COMMIT
danROLLBACK
untuk transaksi hanya baca.
Anda hanya dapat mengeksekusi laporan ini ketika ada transaksi yang aktif.
▶ Contoh: TRANSAKSI KOMITMEN (Klik untuk meluaskan)
Contoh berikut menunjukkan cara meng-commit transaksi dengan
driver JDBC Spanner.
-- Execute a regular read-write transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Execute a read-only transaction. Read-only transactions also need to be
-- either committed or rolled back in the Spanner JDBC driver in order
-- to mark the end of the transaction.
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
{ ABORT | ROLLBACK } [TRANSAKSI | KANTOR]
{ ABORT | ROLLBACK } [TRANSACTION | WORK]
Melakukan ROLLBACK
dari transaksi saat ini. Kata kunci TRANSACTION
dan
WORK
bersifat opsional dan setara, serta tidak berpengaruh.
- Melakukan
ROLLBACK
pada transaksi baca-tulis akan menghapus semua mutasi yang di-buffer, me-roll back transaksi di Spanner, dan melepaskan semua kunci yang ditahan oleh transaksi. - Melakukan
ROLLBACK
pada transaksi hanya-baca akan mengakhiri transaksi hanya-baca saat ini. Laporan berikutnya akan memulai transaksi baru. Tidak ada perbedaan semantik antaraCOMMIT
danROLLBACK
untuk transaksi hanya baca pada koneksi.
Anda hanya dapat mengeksekusi laporan ini ketika ada transaksi yang aktif.
▶ Contoh: TRANSAKSI ROLLBACK (Klik untuk memperluas)
Contoh berikut menunjukkan cara melakukan rollback transaksi dengan driver JDBC Spanner.
-- Use ROLLBACK to undo the effects of a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
-- This ensures that the insert statement is not persisted in the database.
ROLLBACK;
-- Read-only transactions also need to be either committed or rolled back in the
-- Spanner JDBC driver in order to mark the end of the transaction.
-- There is no semantic difference between rolling back or committing a
-- read-only transaction.
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
ROLLBACK;
TETAPKAN TRANSAKSI
SET TRANSACTION { READ ONLY | READ WRITE }
Menetapkan mode transaksi untuk transaksi saat ini.
Anda dapat mengeksekusi pernyataan ini hanya jika AUTOCOMMIT
adalah false
, atau jika Anda telah memulai transaksi dengan mengeksekusi BEGIN [TRANSACTION | WORK]
dan belum mengeksekusi pernyataan apa pun dalam transaksi.
Pernyataan ini menetapkan mode transaksi untuk transaksi saat ini saja. Saat transaksi di-commit atau di-roll back, transaksi berikutnya akan menggunakan mode default untuk koneksi.
(Lihat SET SESSION CHARACTERISTICS
.)
▶ Contoh: SETEL TRANSAKSI (Klik untuk meluaskan)
Contoh berikut menunjukkan cara menetapkan karakteristik transaksi dengan
driver JDBC Spanner.
-- Start a transaction and set the transaction mode to read-only.
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Commit the read-only transaction to mark the end of the transaction.
COMMIT;
-- Start a transaction and set the transaction mode to read-write.
BEGIN;
SET TRANSACTION READ WRITE;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
TETAPKAN KARAKTERISTIK SESI
SET SESSION CHARACTERISTICS AS TRANSACTION { READ ONLY | READ WRITE }
Menetapkan mode transaksi default untuk transaksi dalam sesi ke
READ ONLY
atau READ WRITE
. Pernyataan ini hanya diizinkan jika tidak ada transaksi yang aktif.
Perintah SET TRANSACTION
dapat mengganti setelan ini.
Pernyataan batch
Pernyataan berikut mengelola batch pernyataan DDL dan mengirim batch tersebut ke Spanner.
MULAI DDL BATU
START BATCH DDL
Memulai batch pernyataan DDL pada koneksi. Semua pernyataan berikutnya selama batch harus berupa pernyataan DDL. Pernyataan DDL di-buffer secara lokal
dan dikirim ke Spanner sebagai satu batch saat Anda mengeksekusi RUN BATCH
.
Mengeksekusi beberapa pernyataan DDL sebagai satu batch biasanya lebih cepat daripada menjalankan
pernyataan secara terpisah.
Anda hanya dapat mengeksekusi pernyataan ini jika tidak ada transaksi aktif.
▶ Contoh: Batch DDL (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi batch DDL dengan
driver JDBC Spanner.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Singers (
SingerId BIGINT NOT NULL PRIMARY KEY,
FirstName VARCHAR,
LastName VARCHAR
);
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Albums (
AlbumId BIGINT NOT NULL PRIMARY KEY,
Title VARCHAR,
SingerId BIGINT,
CONSTRAINT fk_albums_singers FOREIGN KEY (SingerId) REFERENCES Singers (SingerId)
);
-- This runs the DDL statements as one batch.
RUN BATCH;
LARI BAWAAN
RUN BATCH
Mengirim semua pernyataan DDL yang di-buffer dalam batch DDL saat ini ke database, menunggu Spanner mengeksekusi pernyataan ini, dan mengakhiri batch DDL saat ini.
Jika Spanner tidak dapat mengeksekusi setidaknya satu pernyataan DDL, RUN BATCH
akan menampilkan error untuk pernyataan DDL pertama yang tidak dapat
dieksekusi oleh Spanner. Jika tidak, RUN BATCH
akan berhasil ditampilkan.
INGATKAN PENGAMBILAN
ABORT BATCH
Menghapus semua pernyataan DDL yang di-buffer dalam batch DDL saat ini dan mengakhiri batch.
Anda hanya dapat mengeksekusi pernyataan ini saat batch DDL aktif. Anda dapat menggunakan ABORT BATCH
terlepas dari apakah batch tersebut memiliki pernyataan DDL yang di-buffer atau tidak. Semua pernyataan DDL sebelumnya dalam batch akan dibatalkan.
▶ Contoh: Batalkan batch DDL (Klik untuk meluaskan)
Contoh berikut menunjukkan cara membatalkan batch DDL dengan
driver JDBC Spanner.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- The following statements are buffered locally.
CREATE TABLE Singers (
SingerId BIGINT NOT NULL PRIMARY KEY,
FirstName VARCHAR,
LastName VARCHAR
);
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Albums (
AlbumId BIGINT NOT NULL PRIMARY KEY,
Title VARCHAR,
SingerId BIGINT,
CONSTRAINT fk_albums_singers FOREIGN KEY (SingerId) REFERENCES Singers (SingerId)
);
-- This aborts the DDL batch and removes the DDL statements from the buffer.
ABORT BATCH;
MULAI BAWA DML dan JALANKAN BATCH
Pernyataan berikut mengelompokkan dua pernyataan DML dan mengirimkannya dalam satu panggilan ke server. Batch DML dapat dijalankan sebagai bagian dari transaksi atau dalam mode autocommit.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
RUN BATCH;
▶ Contoh: Batch DML (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengeksekusi batch DML dengan
driver JDBC Spanner.
-- Start a DML batch. All following statements must be a DML statement.
START BATCH DML;
-- The following statements are buffered locally.
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
-- This sends the statements to Spanner.
RUN BATCH;
-- DML batches can also be part of a read/write transaction.
BEGIN;
-- Insert a row using a single statement.
INSERT INTO MYTABLE (ID, NAME) VALUES (3, 'THREE');
-- Insert two rows using a batch.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (4, 'FOUR');
INSERT INTO MYTABLE (ID, NAME) VALUES (5, 'FIVE');
RUN BATCH;
-- Rollback the current transaction. This rolls back both the single DML
-- statement and the DML batch.
ROLLBACK;
Peningkatan Data dan pernyataan kueri terpartisi
API partitionQuery membagi kueri menjadi bagian-bagian yang lebih kecil, atau partisi, dan menggunakan beberapa mesin untuk mengambil partisi secara paralel. Setiap partisi diidentifikasi oleh token partisi. PartitionQuery API memiliki latensi yang lebih tinggi daripada API kueri standar, karena hanya ditujukan untuk operasi massal seperti mengekspor atau memindai seluruh database.
Peningkatan Data memungkinkan Anda menjalankan kueri analisis dan ekspor data dengan dampak nyaris nol terhadap beban kerja yang ada pada instance Spanner yang disediakan. Data Boost hanya mendukung kueri yang dipartisi.
Anda dapat mengaktifkan Data Boost pada koneksi saat ini dengan
pernyataan SET SPANNER.DATA_BOOST_ENABLED
.
Driver JDBC mendukung tiga alternatif untuk menjalankan kueri yang dipartisi:
SET SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
PARTITION sql
diikuti oleh beberapaRUN PARTITION 'partition-token'
Setiap metode ini dijelaskan di bagian berikut.
SPANNER.DATA_BOOST_ENABLED
Properti jenis BOOL
yang menunjukkan apakah koneksi ini harus menggunakan Data Boost untuk kueri yang dipartisi. Defaultnya
adalah false
.
SHOW [VARIABLE] SPANNER.DATA_BOOST_ENABLED
SET SPANNER.DATA_BOOST_ENABLED {TO|=} { true | false }
Menetapkan apakah koneksi ini harus menggunakan Data Boost untuk kueri terpartisi.
Nilai defaultnya adalah false
.
▶ Contoh: Menjalankan kueri menggunakan Data Boost (Klik untuk meluaskan)
Contoh berikut menunjukkan cara membuat kueri menggunakan Data Boost dengan driver JDBC Spanner.
-- Enable Data Boost on this connection.
SET SPANNER.DATA_BOOST_ENABLED = true;
-- Execute a partitioned query. Data Boost is only used for partitioned queries.
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers;
Untuk contoh lengkapnya, lihat DataBoostExample PostgreSQL.
SPANNER.AUTO_PARTITION_MODE
Properti jenis BOOL
yang menunjukkan apakah koneksi otomatis menggunakan kueri yang dipartisi untuk semua kueri yang dijalankan.
SHOW [VARIABLE] SPANNER.AUTO_PARTITION_MODE
SET SPANNER.AUTO_PARTITION_MODE {TO|=} { true | false}
- Tetapkan variabel ini ke
true
jika Anda ingin koneksi menggunakan kueri yang dipartisi untuk semua kueri yang dijalankan. - Tetapkan juga
SPANNER.DATA_BOOST_ENABLED
ketrue
jika Anda ingin koneksi menggunakan Data Boost untuk semua kueri.
Nilai defaultnya adalah false
.
▶ Contoh: Execute (Klik untuk meluaskan)
Contoh ini menjalankan dua kueri dengan driver JDBC Spanner menggunakan
Data Boost
SET SPANNER.AUTO_PARTITION_MODE = true
SET SPANNER.DATA_BOOST_ENABLED = true
SELECT FirstName, LastName FROM Singers
SELECT SingerId, Title FROM Albums
Untuk contoh lengkapnya, lihat PostgreSQL AutoPartitionModeExample.
JALANKAN KUERI BERPARTISSI
RUN PARTITIONED QUERY <sql>
Menjalankan kueri sebagai kueri yang dipartisi di Spanner. Pastikan SPANNER.DATA_BOOST_ENABLED
ditetapkan ke true
untuk menjalankan kueri dengan Data Boost:
SET SPANNER.DATA_BOOST_ENABLED = true
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers
Driver JDBC secara internal mempartisi kueri dan mengeksekusi partisi secara
paralel. Hasilnya digabungkan menjadi satu kumpulan hasil dan ditampilkan ke
aplikasi. Jumlah thread pekerja yang menjalankan partisi dapat ditetapkan dengan
variabel SPANNER.MAX_PARTITIONED_PARALLELISM
.
Untuk contoh lengkapnya, lihat PostgreSQL RunPartitionedQueryExample.
BAGIAN <SQL>
PARTITION <sql>
Membuat daftar partisi untuk menjalankan kueri terhadap Spanner dan menampilkan daftar token partisi ini. Setiap token partisi dapat dijalankan pada koneksi JDBC terpisah pada host yang sama atau host lainnya menggunakan perintah RUN PARTITION 'partition-token'
.
▶ Contoh: Kueri partisi (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mempartisi kueri, lalu mengeksekusi setiap partisi secara terpisah menggunakan driver JDBC Spanner.
-- Partition a query. This returns a list of partition tokens that can be
-- executed either on this connection or on any other connection to the same
-- database.
PARTITION SELECT FirstName, LastName FROM Singers;
-- Run the partitions that were returned from the previous statement.
RUN PARTITION 'partition-token-1';
RUN PARTITION 'partition-token-2';
Untuk contoh lengkapnya, lihat PartitionQueryExample PostgreSQL.
JALANKAN BAGIAN 'token partisi'
RUN PARTITION 'partition-token'
Menjalankan partisi kueri yang sebelumnya telah ditampilkan oleh perintah
PARTITION
. Perintah ini dapat dieksekusi pada setiap koneksi JDBC yang terhubung ke database yang sama dengan database yang membuat token partisi.
Untuk contoh lengkapnya, lihat PartitionQueryExample PostgreSQL.
SPANNER.MAX_PARTITIONED_PARALLELISM
Properti jenis int8
yang menunjukkan jumlah thread pekerja
yang digunakan driver JDBC Spanner untuk mengeksekusi partisi. Nilai ini digunakan untuk:
SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
SHOW [VARIABLE] SPANNER.MAX_PARTITIONED_PARALLELISM
SET SPANNER.MAX_PARTITIONED_PARALLELISM = <int8>
Menetapkan jumlah maksimum thread pekerja yang dapat digunakan driver JDBC Spanner
untuk mengeksekusi partisi. Menetapkan nilai ini ke 0
akan menginstruksikan
driver JDBC Spanner untuk menggunakan jumlah inti CPU pada mesin
klien sebagai jumlah maksimum.
Nilai defaultnya adalah 0
.
Perintah Savepoint
Pernyataan berikut mengaktifkan dan menonaktifkan savepoint yang diemulasi dalam transaksi. Anda dapat membuat Savepoint dengan memanggil
metode
java.sql.Connection#setSavepoint()
.
Driver JDBC Spanner mengemulasi Savepoint untuk mendukung framework yang mengandalkan fitur ini untuk transaksi bertingkat. Savepoint diemulasi dengan melacak checksum yang berjalan untuk hasil yang telah ditampilkan oleh pernyataan dalam transaksi. Saat melakukan roll back ke Savepoint, driver JDBC Spanner akan me-roll back transaksi, lalu mencoba kembali transaksi tersebut hingga ke titik tempat penyimpanan ditetapkan. Checksum percobaan ulang dibandingkan dengan checksum transaksi awal untuk memverifikasi bahwa hasil yang sama telah ditampilkan.
SPANNER.SAVEPOINT_SUPPORT
SHOW [VARIABLE] SPANNER.SAVEPOINT_SUPPORT
SET SPANNER.SAVEPOINT_SUPPORT {TO|=} { 'DISABLED' | 'FAIL_AFTER_ROLLBACK' | 'ENABLED' }
Properti jenis STRING
yang menunjukkan konfigurasi SAVEPOINT_SUPPORT
saat ini. Nilainya dapat berupa:
DISABLED
: Semua perintah Savepoint dinonaktifkan dan akan gagal.FAIL_AFTER_ROLLBACK
: Perintah Savepoint diaktifkan. Melakukan roll back kesavepoint akan me-roll back seluruh transaksi. Transaksi akan gagal jika Anda mencoba menggunakan transaksi setelah melakukan roll back ke Savepoint.ENABLED
: Semua perintah Savepoint diaktifkan. Roll back ke Savepoint akan melakukan rollback transaksi dan percobaan ulang dilakukan ke Savepoint. Operasi ini gagal dengan errorAbortedDueToConcurrentModificationException
jika data pokok yang telah digunakan oleh transaksi hingga titik penyimpanan telah berubah.
Nilai defaultnya adalah FAIL_AFTER_ROLLBACK
.
Anda dapat mengubah nilai variabel ini hanya saat tidak ada transaksi aktif.
▶ Contoh: Dukungan Savepoint (Klik untuk meluaskan)
Contoh berikut menunjukkan cara mengaktifkan dan menonaktifkan dukungan Savepoint di
driver JDBC Spanner.
try (Connection connection =
DriverManager.getConnection(
String.format(
"jdbc:cloudspanner:/projects/%s/instances/%s/databases/%s",
"my-project", "my-instance", "my-database"))) {
// Savepoints can only be used when AutoCommit=false.
connection.setAutoCommit(false);
// Disables setting a savepoint.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='DISABLED'");
// The following statement fails because savepoints have been disabled.
connection.setSavepoint("my_savepoint1");
// Enables setting a savepoint and releasing a savepoint.
// Rolling back to a savepoint is disabled.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'");
Savepoint mySavepoint2 = connection.setSavepoint("my_savepoint2");
connection.createStatement().execute("insert into my_table (id, value) values (1, 'One')");
connection.releaseSavepoint(mySavepoint2);
connection.commit();
// Enables setting, releasing and rolling back to a savepoint.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='ENABLED'");
Savepoint mySavepoint3 = connection.setSavepoint("my_savepoint3");
connection.createStatement().execute("insert into my_table (id, value) values (2, 'Two')");
connection.rollback(mySavepoint3);
}
Langkah selanjutnya
Pelajari cara menghubungkan JDBC ke database dialek PostgreSQL.