全部產品
Search
文件中心

Lindorm:UPSERT

更新時間:Jul 06, 2024

本文介紹更新時空資料表的文法。

文法

upsert_statement ::=  UPSERT [hint_clause] INTO table_name
                      '('columns| _l_ts_')' 
                      VALUES '(' values ')'
                      [ ON DUPLICATE KEY update_column = update_value |IGNORE ]?
columns ::=  column_name, columns
values  ::=  term, values,'(' values ')'
             | function_name '(' term ( ',' term )* ')'
update_column ::= column_name
update_value ::= term

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression
說明
  • 支援批量寫入,指定需要寫入的相關列,可以在Values關鍵字中確定幾行資料。

  • 支援upsert on duplicate key操作,類似check and put操作,要求upsert指定的value值可以確定一行。如果ON DUPLICATE KEY跟隨的是指定的需要更新的列和value(暫時無法做到基於原有key存在性判斷進行對應value更新),如果存在則拋出異常。 如果是ON DUPLICATE KEY IGNORE表示忽略對應的確定的一行是否存在的檢查,直接進行插入。

  • Lindorm SQL支援標準JDBC的訪問方式,包括正常statement以及preparestatemt方式,但是對於標準JDBC在preparestatemt情境下的標準batch插入資料的方式僅在lindorm 2.2.16版本以後支援。

樣本

  • 通過以下兩種方式在時空資料表中寫入一條資料。

    • 方式一

      UPSERT INTO dt(id, g, t) VALUES(0,ST_MakePoint(0.0,1.0),1000);
    • 方式二

      UPSERT INTO dt(id, g, t) VALUES(0,ST_GeomFromText('POINT (0.0 1.0)'),1000);
  • 在時空資料表中批量寫入資料。

    UPSERT INTO dt (id, g, t) VALUES(1,ST_MakePoint(1.23,2.34),2000),(2,ST_MakePoint(3.45,5.67),3000),(3,ST_MakePoint(4.56,5.67),4000);
說明
  • 寫入資料時使用到相關時空函數的說明,請參見函數概覽

  • 通過Java JDBC寫入資料的樣本,請參見快速入門