PostgreSQL實現數據庫數據存在就修改沒有就刪除

說明:

今天在使用log4j將日誌信息寫入數據庫時有這麼一個需求:如果數據庫存在一條記錄,則將新插入的值,作爲更新,如果沒有這樣一條記錄,則新增。

實現:

表結構:

通過查閱資料發現postgre有這麼一個方法:insert on conflict do  實現如下

INSERT INTO "warnLog" ("datatime", "log_level", "method", "connector_name", "location", "message") VALUES ('%d{yyyy-MM-dd HH:mm}','%p','%M','%X{connector_name}','%l','%m')
   ON conflict ("datatime","method", "connector_name", "location") DO 
  UPDATE "warnLog" SET "datatime" = '%d{yyyy-MM-dd HH:mm}' ,"log_level" = '%p', "method" = '%M', "connector_name" = '%X{connector_name}', "location" = '%l', "message" = '%m';

注意:conflict(這裏面的值一定的是主鍵或者唯一值)

完整語法如下:看不懂可以忽略

Command:     INSERT  
Description: create new rows in a table  
Syntax:  
[ WITH [ RECURSIVE ] with_query [, ...] ]  
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]  
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }  
    [ ON CONFLICT [ conflict_target ] conflict_action ]  
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]  
  
where conflict_target can be one of:  
  
    ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ]  
    ON CONSTRAINT constraint_name  
  
and conflict_action is one of:  
  
    DO NOTHING  
    DO UPDATE SET { column_name = { expression | DEFAULT } |  
                    ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) |  
                    ( column_name [, ...] ) = ( sub-SELECT )  
                  } [, ...]  
              [ WHERE condition ]  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章