ホームページ >データベース >mysql チュートリアル >SQL の 2 つの条件に基づいてデータを効率的に挿入または更新するにはどうすればよいですか?

SQL の 2 つの条件に基づいてデータを効率的に挿入または更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 12:06:35574ブラウズ

How Can I Efficiently Insert or Update Data Based on Two Conditions in SQL?

2 つの条件による挿入または更新

この問題は単純そうに見えます。ただし、時間的に効率的な解決策を見つける必要があります。次のスキーマを持つテーブルを考えてみましょう:

ID INTEGER PRIMARY KEY AUTOINCREMENT
name INTEGER
values1 INTEGER
values2 INTEGER
dates DATE

毎日、データがこのテーブルに追加され、将来の日付を持つ新しい行が作成されます。 「name」列のデータは有限セットから抽出されます。望ましい動作は、新しいデータが利用可能な場合は新しい行を挿入し、一致する「名前」と「日付」を持つ行がすでに存在する場合は既存の行を更新することです。

解決策:

この状況に適切な方法は、「INSERT INTO ... ON DUPLICATE KEY UPDATE」ステートメントです。このステートメントを使用すると、新しい行を挿入したり、特定の条件を満たす既存の行を更新したりすることができます。あなたの場合、条件は '名前' と '日付' に一致します。

このメソッドを使用するには、挿入中に衝突を検出するためにテーブルに一意のキー (複合キーの場合もあります) が必要です。この一意のキーは、主キーまたは次のような複合キーにすることができます:

UNIQUE KEY(name, dates)

同じ 'name' と 'date' を持つ行がすでに存在する場合、挿入操作は競合として検出されます。 「ON DUPLICATE KEY UPDATE」句で指定された更新アクションが実行されます。

Complete例:

CREATE TABLE myThing (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name INT NOT NULL,
    values1 INT NOT NULL,
    values2 INT NOT NULL,
    dates DATE NOT NULL,
    UNIQUE KEY(name, dates)  -- This line is crucial
);

-- Insert a new row or update if a row with the same 'name' and 'date' exists
INSERT INTO myThing(name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2=values2+1;

「INSERT INTO ... ON DUPLICATE KEY UPDATE」ステートメントを利用すると、指定されたキーの一意性に基づいて新しい行を効率的に挿入したり、既存の行を更新したりできます。

以上がSQL の 2 つの条件に基づいてデータを効率的に挿入または更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。