Anda dapat menggunakan sintaks UPDATE untuk memperbarui data di LindormTable. Topik ini menjelaskan sintaks UPDATE dan tindakan pencegahan penggunaannya.
Mesin dan versi yang berlaku
Sintaks
UPDATEhanya berlaku untuk LindormTable.Sintaks
UPDATEdidukung di LindormTable 2.3.2 dan versi lebih baru. Untuk informasi tentang cara melihat atau meningkatkan versi LindormTable, lihat Catatan Rilis LindormTable dan Tingkatkan Versi Mesin Minor dari Instance Lindorm.
Sintaks
update_statement ::= UPDATE [hint_clause] table_identifier
SET column_identifier = value (',' column_identifier = value ) *
WHERE where_clause
where_clause ::= relation ( AND|OR relation )*
relation ::= column_name operator term
| '(' column_name ( ',' column_name )* ')' operator tuple_literal
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKEBatasan
Anda tidak dapat menggunakan sintaks UPDATE untuk memperbarui kunci utama.
Atomicitas baris tunggal tidak dijamin. Jika terjadi kesalahan saat Anda melakukan operasi penambahan, seperti menambah nilai suatu field, dan diperlukan percobaan ulang, hasilnya mungkin tidak akurat karena perhitungan berulang.
Transaksi lintas baris tidak didukung. Jika terjadi kesalahan saat Anda mengeksekusi pernyataan
UPDATEuntuk memodifikasi beberapa baris data, data di beberapa baris mungkin diperbarui sementara data di baris lainnya mungkin gagal diperbarui.CatatanSaat menggunakan ekspresi untuk memperbarui data di kolom non-kunci utama, kami sarankan Anda memperbarui satu baris data dan menentukan semua kunci utama untuk dengan cepat menemukan baris yang ingin diperbarui. Sebagai contoh, nilai di kolom tertentu bertambah dalam topik ini.
Saat melakukan pembaruan skalar (misalnya, klausa pembaruan adalah
c1=1) dan data di beberapa baris gagal diperbarui, lakukan operasi pembaruan lagi.
Contoh
Kode sampel berikut memberikan contoh tentang cara membuat tabel dan menyisipkan satu baris data:
-- Buat tabel bernama sensor.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
c1 INTEGER,
c2 VARCHAR,
c3 VARCHAR,
PRIMARY KEY(p1)
);
-- Sisipkan satu baris data.
UPSERT INTO sensor(p1, c1, c2, c3) VALUES(1,1,'a','a');Hasil sampel:
+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1 | 1 | a | a |
+----+----+----+----+Perbarui data berdasarkan kunci utama
UPDATE sensor SET c2='b' WHERE p1=1;Verifikasi Hasil
Anda dapat mengeksekusi pernyataan SELECT * FROM sensor; untuk memeriksa apakah data telah diperbarui. Hasil sampel:
+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1 | 1 | b | a |
+----+----+----+----+Perbarui data berdasarkan non-kunci utama
Versi LindormTable harus 2.7.6 atau lebih baru. Anda dapat melihat versi saat ini dan memperbarui versi LindormTable ke 2.7.6 atau lebih baru di konsol.
Fitur ini sedang dalam pratinjau publik. Jika Anda ingin menggunakan fitur ini, hubungi dukungan teknis Lindorm (ID DingTalk: s0s3eg3).
UPDATE sensor SET c3='b' WHERE c1=1;Verifikasi Hasil
Anda dapat mengeksekusi pernyataan SELECT * FROM sensor; untuk memeriksa apakah data telah diperbarui. Hasil sampel:
+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1 | 1 | b | b |
+----+----+----+----+Tambahkan nilai di kolom tertentu
Versi LindormTable harus 2.7.6 atau lebih baru. Anda dapat melihat versi saat ini dan memperbarui versi LindormTable ke 2.7.6 atau lebih baru di konsol.
Fitur ini sedang dalam pratinjau publik. Jika Anda ingin menggunakan fitur ini, hubungi dukungan teknis Lindorm (ID DingTalk: s0s3eg3).
UPDATE sensor SET c1 = c1 + 1 WHERE p1 = 1;Verifikasi Hasil
Anda dapat mengeksekusi pernyataan SELECT * FROM sensor; untuk memeriksa apakah data telah diperbarui. Hasil sampel:
+------+------+------+------+
| p1 | c1 | c2 | c3 |
+------+------+------+------+
| 1 | 2 | b | b |
+------+------+------+------+FAQ
Mengapa jumlah baris yang terpengaruh tidak sesuai harapan setelah data diperbarui?
Data di tabel indeks pencarian dan tabel utama disinkronkan secara real-time. Jika Anda membuat indeks pencarian untuk tabel utama dan kondisi pembaruan mengenai kolom indeks, pembaruan mungkin gagal karena latensi sinkronisasi data. Akibatnya, jumlah baris yang terpengaruh tidak sesuai harapan. Anda dapat mengeksekusi kembali operasi pembaruan setelah sinkronisasi selesai. Untuk informasi tentang latensi pengindeksan pencarian, lihat bagian FAQ dari topik "Ikhtisar".
Apa penyebab kesalahan timeout saat Anda memperbarui beberapa baris data secara bersamaan?
Kami menyarankan agar Anda tidak memperbarui lebih dari 10.000 baris data secara bersamaan. Jika diperlukan, tentukan parameter _l_operation_timeout_ dalam pernyataan UPDATE untuk mengontrol periode timeout, seperti contoh berikut:
UPDATE /*+ _l_operation_timeout_(30000) */ table1 SET a=1 WHERE b=2;. Untuk detail lebih lanjut tentang parameter _l_operation_timeout_, lihat bagian Parameters of hintOptions pada topik "HINT". Jika masalah timeout masih berlanjut setelah menentukan parameter tersebut, Anda dapat menggunakan mesin komputasi Lindorm untuk memperbarui beberapa baris data secara bersamaan.