ホームページ >データベース >mysql チュートリアル >SQL の 2 つの条件に基づいてデータを効率的に挿入または更新するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。