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

ApsaraDB RDS:一度に複数のデータレコードを挿入、更新、削除する

最終更新日:Jan 17, 2024

このトピックでは、ApsaraDB RDS for PostgreSQLインスタンスの複数のデータレコードを一度に挿入、更新、および削除する方法について説明します。 これらの操作により、RDSインスタンスとアプリケーション間のやり取りの数が減り、RDSインスタンスのデータ処理能力が向上します。

一度に複数のデータレコードを挿入

次のいずれかの方法を使用して、一度に複数のデータレコードを挿入できます。

この例では、次のステートメントを使用して、tbl1という名前のテストテーブルを作成します。

テーブルtbl1の作成 (
    idシリアル基本キー、
    情報テキスト、
    crt_timeタイムスタンプ
); 

方法1: INSERT INTO... を実行する SELECTステートメント。

  • サンプル文

    -- 複数のデータレコードをtbl1テーブルに一度に挿入します。
    INSERT INTO tbl1 (id, info ,crt_time) SELECT GENERATE_SERIES(1,10000) 、'test' 、NOW();
    
    -- データボリュームを照会します。
    選択カウント (*) からtbl1; 
  • Output

    カウント     
      -------    
       10000    
      (1行) 

方法2: VALUES() 、() 、...(); 関数を使用する。

  • サンプル文

    -- 複数のデータレコードをtbl1テーブルに一度に挿入します。
    INSERT INTO tbl1 (id,info,crt_time) 値 (1,'test',NOW()), (2,'test2',NOW()), (3,'test3',NOW());
    
    -- データボリュームを照会します。
    選択カウント (*) からtbl1; 
  • Output

    カウント     
      -------    
           3    
      (1行) 

方法3: BEGINを実行する。複数のINSERTステートメント...; END; トランザクション。

説明

このメソッドを使用すると、1つのトランザクションに複数のINSERTステートメントを含めることができます。 これにより、トランザクションコミット時の待機時間が短縮され、RDSインスタンスのパフォーマンスが向上します。

  • サンプル文

    -- 複数のデータレコードをtbl1テーブルに一度に挿入します。
    開始;
    INSERT INTO tbl1 (id,info,crt_time) 値 (1,'test',NOW());
    INSERT INTO tbl1 (id,info,crt_time) 値 (2,'test2',NOW());
    INSERT INTO tbl1 (id,info,crt_time) 値 (3,'test3',NOW());
    エンド;
    
    -- データボリュームを照会します。
    選択カウント (*) からtbl1; 
  • Output

    カウント     
      -------    
           3    
      (1行) 

方法4: COPYコマンドを使用します。

説明

COPYコマンドは、INSERT文と比較して使いやすく、データを挿入する効率が高くなります。

  • サンプル文

    − 標準入力ストリームからデータを読み取り、データをtbl1テーブルにコピーする。 
    COPY tbl1からstdin;
    
    -- 最初のデータレコードを入力します。
    1 'テスト' '2023-01-01'
    -- 2番目のデータレコードを入力します。
    2 'テスト1' 2023-02-02'
    -終了
    \.
    
    -- データボリュームを照会します。
    選択カウント (*) からtbl1; 
  • Output

    カウント     
      -------    
           2    
      (1行) 
    説明

    使用可能なCOPY関数は、使用する言語ドライバーによって異なります。 詳細については、次のドキュメントをご参照ください。

一度に複数のデータレコードを更新する

サンプル文

-- 一度に複数のデータレコードを更新します。
UPDATE tbl1 SET inf o=tmp.info from (VALUES (1,'new1'),(2,'new2'),(6,'new6')) AS tmp (id,info) WHERE tbl1.id=tmp.id;

-- テーブルデータを照会します。
SELECT * からtbl1; 

Output

id | info | crt_time
---- -------------- ----------------------------  
  3 | こんにちは | 2017-04-24 15:31:49.14291  
  4 | digoal0123 | 2017-04-24 15:42:50.912887  
  5 | hello digoal | 2017-04-24 15:57:29.622045  
  1 | new1 | 2017-04-24 15:58:55.610072  
  2 | new2 | 2017-04-24 15:28:20.37392  
  6 | new6 | 2017-04-24 15:59:12.265915
(6行) 

一度に複数のデータレコードを削除する

  • 一度に部分的なテーブルデータを削除する

    • サンプル文

      -- 一度に複数のデータレコードを削除します。
      tbl1の使用から削除 (値 (3) 、(4) 、(5)) AS tmp(id) WHERE tbl1.id=tmp.id;
      
      -- テーブルデータを照会します。
      SELECT * からtbl1; 
    • Output

      id | info | crt_time
      ---- --------- ----------------------------  
        1 | new1 | 2017-04-24 15:58:55.610072  
        2 | new2 | 2017-04-24 15:28:20.37392  
        6 | new6 | 2017-04-24 15:59:12.265915 
  • すべてのテーブルデータを削除します。 TRUNCATEステートメントの使用を推奨します。

    • サンプル文

      -- ロックタイムアウト期間を設定します。
      SET lock_timeout = '1s';
      
      -- tbl1テーブル内のすべてのデータを削除します。
      トランケートtbl1;
      
      -- テーブルデータを照会します。
      SELECT * からtbl1; 
    • Output

      id | info | crt_time
      ---- ------ -------------
      (0行)