挿入または更新のタスク2 つの条件に基づいてデータベース内の行を処理することは、特に効率的なソリューションを求める場合には困難になる場合があります。この問題は、重複した名前と日付を持つ新しい行が継続的に生成されるテーブルを扱う場合に特によく発生します。
この問題の最適な解決策は、INSERT INTO ON DUPLICATE です。 KEY UPDATE ステートメント。このステートメントにより、行がまだ存在しない場合は新しい行を挿入し、存在する場合は既存の行を更新できます。このステートメントを利用するには、挿入操作中に競合を検出するために、テーブルに一意のキー (複合キーなど) が必要です。
次のスキーマを持つテーブルを考えます。
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 unique key is crucial. );
Withこの設定では、次のステートメントは、名前と日付の組み合わせが存在しない場合は新しい行を挿入し、存在する場合は既存の行を更新します:
INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2=values2+1;
同じ名前と日付の組み合わせでinsertステートメントを複数回実行すると、次のようにvalues2列が更新されます。以下:
| id | name | values1 | values2 | dates | | --- | --- | --- | --- | --- | | 1 | 777 | 1 | 4 | 2015-07-11 |
INSERT INTO ON DUPLICATE KEY UPDATE ステートメントは、挿入と複数の条件に基づいて更新します。このアプローチでは、一意のキーを定義することで重複エントリが適切に処理され、複雑なストアド プロシージャが不要になります。
以上が2 つの条件に基づいてデータベース行を効率的に INSERT または UPDATE するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。