MySQL で「存在しない場合は挿入」操作を実装するにはどうすればよいですか?
P粉005105443
2023-08-29 10:59:40
<p>Google 検索で初めてこの記事を見つけました。<em>標準 SQL で INSERT if NOT EXISTS クエリを作成する方法</em> では、相互に排他的なテーブルについて説明しています。 </p>
<p>約 1,400 万件のレコードを含むテーブルがあります。同じ形式でさらにデータを追加したい場合、クエリのペア (つまり、結果セットを使用して、1 つのクエリをチェックし、1 つのクエリを挿入する) を使用せずに、挿入したいレコードが存在しないことを確認する方法はありますか?は空です)? </p>
<p>フィールドの<code>unique</code>制約は、<code>insert</code>がすでに存在する場合に失敗することを保証しますか? </p>
<p><em> は単なる </em> 制約のようで、PHP 経由で挿入を発行すると、スクリプトがガタガタします。 </p>
######解決:###### リーリー
イラスト:
最も内側のクエリ リーリー 挿入するデータを含む行がすでに存在するかどうかを検出するために、
WHERE NOT EXISTS条件として使用されます。このクラスの行を見つけた後にクエリが停止する可能性があるため、
LIMIT 1(マイクロ最適化、省略可能)。
中間クエリ
DUALリーリー
は挿入される値を表します。は、すべての Oracle データベースにデフォルトで存在する特別な単一行単一テーブルを指します (
https://en.wikipedia.org/wiki/DUAL_tableを参照)。 MySQL Server バージョン 5.7.26 では、
外部クエリ
FROM DUAL
が省略された場合に有効なクエリが得られますが、古いバージョン (5.5.60 など) では FROM 情報が必要のようです。WHERE NOT EXISTS
を使用すると、最も内側のクエリで一致するデータが見つかった場合、中間クエリは空の結果セットを返します。リーリー
データを挿入します (中間クエリがデータを返す場合)。INSERT IGNORE INTO table
を使用します。
INSERT … ON DUPLICATE KEY UPDATE
構文もあり、
13.2.6.2 INSERT … ON DUPLICATE KEY UPDATE ステートメント で使用できます。.org.ua からの投稿 Google の Web キャッシュ によると: