Google 検索で初めてこの記事を見つけました。標準 SQL で INSERT if NOT EXISTS クエリを作成する方法 では、相互に排他的なテーブルについて説明しています。
約 1,400 万件のレコードを含むテーブルがあります。同じ形式でさらにデータを追加したい場合、クエリのペア (つまり、結果セットを使用して、1 つのクエリをチェックし、1 つのクエリを挿入する) を使用せずに、挿入したいレコードが存在しないことを確認する方法はありますか?は空です)?
フィールドのunique
制約は、insert
がすでに存在する場合に失敗することを保証しますか?
は単なる 制約のようで、PHP 経由で挿入を発行すると、スクリプトがガタガタします。
######解決:###### リーリー
イラスト:
最も内側のクエリリーリー挿入するデータを含む行がすでに存在するかどうかを検出するために、
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 キャッシュによると: