0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQL ON DUPLICATE KEY UPDATEを使って挿入と更新を同時に行う

Posted at

MySQLのON DUPLICATE KEY UPDATE句を使用すると、1つのクエリで挿入(INSERT)と更新(UPDATE)を同時に行うことができます。
この機能は特に大量のデータを効率的に処理する際に非常に有用です。

重要な注意点

重要: ON DUPLICATE KEY UPDATEを使用するには、対象のテーブルにユニーク制約またはプライマリキーが設定されている必要があります。
これらの制約がないと、重複を正しく検出できません。

基本的な使用方法

以下に、一般的な商品マスターテーブルを例にして、ON DUPLICATE KEY UPDATEの使用方法を説明します。

まず、以下のような商品テーブルを想定します:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_code VARCHAR(50) UNIQUE,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    stock INT NOT NULL
);

この例では、idがプライマリキーで、product_codeにユニーク制約が設定されています。

挿入と更新を同時に行う

以下のクエリを使用すると、新しい商品の挿入または既存商品の更新を1回の操作で行えます:

INSERT INTO products (product_code, name, price, stock)
VALUES ('A001', 'スマートフォン', 50000, 100)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    price = VALUES(price),
    stock = stock + VALUES(stock);

このクエリの動作は以下の通りです:

  1. product_codeが'A001'の商品が存在しない場合、新しい行が挿入されます。
  2. product_codeが'A001'の商品が既に存在する場合、指定された列が更新されます。
    • namepriceは新しい値で上書きされます。
    • stockは既存の在庫数に新しい値を加算します。

複数行の一括処理

複数の商品を一度に処理することも可能です:

INSERT INTO products (product_code, name, price, stock)
VALUES 
    ('A001', 'スマートフォン', 50000, 100),
    ('B002', 'ノートPC', 80000, 50),
    ('C003', 'ワイヤレスイヤホン', 15000, 200)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    price = VALUES(price),
    stock = stock + VALUES(stock);

このクエリは、3つの商品を一度に処理します。各商品について、新規挿入または更新が行われます。

条件付き更新

特定の条件下でのみ更新を行いたい場合は、IF文を使用できます:

INSERT INTO products (product_code, name, price, stock)
VALUES ('A001', 'スマートフォン', 55000, 50)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    price = IF(price < VALUES(price), VALUES(price), price),
    stock = stock + VALUES(stock);

この例では、新しい価格が既存の価格より高い場合のみ、価格が更新されます。

まとめ

ON DUPLICATE KEY UPDATEを使用することで、MySQLでの挿入と更新の処理を効率化できます。
ただし、この機能を使用するには必ずユニーク制約またはプライマリキーが設定されている必要があることを忘れないでください。
適切に使用すれば、データベース操作の簡素化と高速化に大きく貢献します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?