すべてのプロダクト
Search
ドキュメントセンター

Lindorm:UPDATE

最終更新日:Jun 10, 2025

LindormTable のデータを更新するには、UPDATE 構文を使用できます。このトピックでは、UPDATE 構文と使用上の注意事項について説明します。

適用可能なエンジンとバージョン

構文

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 | LIKE

制限事項

  • UPDATE 構文を使用してプライマリキーを更新することはできません。

  • 単一行の原子性は保証されません。フィールドの値のインクリメントなど、インクリメント操作の実行中にエラーが発生し、再試行が必要な場合、繰り返しの計算により結果が不正確になる可能性があります。

  • 行をまたがるトランザクションはサポートされていません。UPDATE 文を実行して複数の行のデータを変更するときにエラーが発生した場合、一部の行のデータは更新される可能性がありますが、他の行のデータは更新に失敗する可能性があります。

    説明
    • 式を使用して非プライマリキー列のデータを更新する場合は、1 行のデータを更新し、すべてのプライマリキーを指定して、更新する行をすばやく特定することをお勧めします。たとえば、このトピックの特定の列の値が増分されるを参照してください。

    • スカラー更新を実行する場合(たとえば、更新句が c1=1 の場合)で、一部の行のデータの更新に失敗した場合は、更新操作を再実行してください。

次のサンプルコードは、テーブルを作成してデータの行を挿入する方法の例を示しています。

-- sensor という名前のテーブルを作成します。
CREATE TABLE sensor (
  p1 INTEGER NOT NULL, 
  c1 INTEGER, 
  c2 VARCHAR, 
  c3 VARCHAR,
  PRIMARY KEY(p1)
);

-- データの行を挿入します。
UPSERT INTO sensor(p1, c1, c2, c3) VALUES(1,1,'a','a');

サンプル結果:

+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1  | 1  | a  | a  |
+----+----+----+----+

プライマリキーに基づいてデータを更新する

UPDATE sensor SET c2='b' WHERE p1=1;

結果を確認する

SELECT * FROM sensor; 文を実行して、データが更新されたかどうかを確認できます。サンプル結果:

+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1  | 1  | b  | a  |
+----+----+----+----+

非プライマリキーに基づいてデータを更新する

重要
  • LindormTable のバージョンは 2.7.6 以後である必要があります。現在のバージョンを表示し、コンソールで LindormTable のバージョンを 2.7.6 以後に更新できます。

  • この機能はパブリックプレビュー段階にあります。この機能を使用する場合は、Lindorm テクニカルサポート(DingTalk ID: s0s3eg3)にお問い合わせください。

UPDATE sensor SET c3='b' WHERE c1=1;

結果を確認する

SELECT * FROM sensor; 文を実行して、データが更新されたかどうかを確認できます。サンプル結果:

+----+----+----+----+
| p1 | c1 | c2 | c3 |
+----+----+----+----+
| 1  | 1  | b  | b  |
+----+----+----+----+

特定の列の値を増分する

重要
  • LindormTable のバージョンは 2.7.6 以後である必要があります。現在のバージョンを表示し、コンソールで LindormTable のバージョンを 2.7.6 以後に更新できます。

  • この機能はパブリックプレビュー段階にあります。この機能を使用する場合は、Lindorm テクニカルサポート(DingTalk ID: s0s3eg3)にお問い合わせください。

UPDATE sensor SET c1 = c1 + 1 WHERE p1 = 1;

結果を確認する

SELECT * FROM sensor; 文を実行して、データが更新されたかどうかを確認できます。サンプル結果:

+------+------+------+------+
| p1   | c1   | c2   | c3   |
+------+------+------+------+
|    1 |    2 | b    | b    |
+------+------+------+------+

よくある質問

  • データの更新後、影響を受けた行数が予想と一致しないのはなぜですか?

    検索インデックステーブルとプライマリテーブルのデータはリアルタイムで同期されます。プライマリテーブルの検索インデックスを作成し、更新条件がインデックス列にヒットした場合、データの同期遅延が原因で更新が失敗する可能性があります。その結果、影響を受けた行数は予想と一致しません。同期が完了した後、更新操作を再実行できます。検索インデックスの遅延については、「概要」トピックのよくある質問セクションをご参照ください。

  • 複数の行のデータを同時に更新するときにタイムアウトエラーが発生するのはなぜですか?

    1 万行を超えるデータを同時に更新しないことをお勧めします。どうしても必要な場合は、UPDATE 文で _l_operation_timeout_ パラメーターを指定してタイムアウト期間を制御することをお勧めします。たとえば、UPDATE /*+ _l_operation_timeout_(30000) */ table1 SET a=1 WHERE b=2; などです。 _l_operation_timeout_ パラメーターの詳細については、「HINT」トピックのhintOptions のパラメーターセクションをご参照ください。パラメーターを指定した後もタイムアウトの問題が解決しない場合は、Lindorm コンピュートエンジンを使用して複数の行のデータを同時に更新できます。