MySQL – データが存在しない場合にのみ新しい行を挿入する方法

Mysql Detaga Cun Zaishinai Chang Heninomi Xinshii Xingwo Cha Rusuru Fang Fa



MySQL は、データベースにデータを格納する有名なオープン ソース RDBMS です。データベースのテーブルにデータを挿入することは、一般的なタスクです。重複データを挿入して冗長性をなくしたくない場合があります。 MySQL では、同様のデータがまだ存在しない場合にのみ、ユーザーがデータを挿入できます。

この投稿では、MySQL テーブルにデータがまだ存在しない場合にのみ、新しい行を挿入する方法について説明します。この投稿を始める前に、MySQL ローカル サーバーにログインしていて、作業するデータベースを選択していることを確認してください。

「INSERT IGNORE」ステートメントを使用して、データが存在しない場合にのみ新しい行を挿入する

さて、タイトルの質問に対する答えは非常に単純明快です。単純に「 入れる ” キーワードと “ 無視 」 キーワード。これにより、MySQL でデータの以前のエントリが見つからない場合にのみ、新しいデータまたは挿入クエリが実行されるようになります。この概要を簡単に理解するには、次の構文を見てください。







入れる 無視 の中へ [ テーブル - 名前 ] ( [ 列1 - 名前 ] [ 列 2 - 名前 ] [ 列3 - 名前 ] ) ( [ 値1 ] [ 値2 ] [ 値3 ] ) ;

ユーザーが行の値を入力したい場合の例を見てみましょう。 1 」、「 ジョン ' と ' ドウ ' の中に ' お客様 ” 列のテーブル “ ID 、」「 ファーストネーム ' と ' 苗字 ' それぞれ。これらの値を持つ行がまだ存在しない場合は、次のクエリを実行してこれらの値を挿入します。



選択する * から お客様;
入れる 無視 の中へ お客様 ( ID ファーストネーム 苗字 ) ( 1 「ジョン」 「ドウ」 ) ;

出力には、クエリの実行前と実行後のテーブルのデータを表示する 2 つのテーブルが含まれます。行がすでに存在しているため、テーブルに何も変更がないことがわかります。MySQL はエラーを表示せずに挿入プロセスを正常に無視しました。







「WHERE NOT EXISTS」句を使用してデータが存在しない場合にのみ新しい行を挿入する

MySQL では、「 どこ 存在しない ” 句で行を使用すると、行がテーブルに既に存在する場合、行の挿入が防止されます。 に挿入 条件を定義するサブクエリを含むステートメント。この句をサブクエリで使用すると、 (SELECT * FROM [テーブル名] [列名]=[式]); 」は、条件を満たす行がテーブルに存在するかどうかを確認します。行が存在する場合、「 存在しない場所 」句は偽の値を返し、「 選択する 」ステートメントは行を返しません。その結果、行はテーブルに挿入されません。構文は次のとおりです。

入れる の中へ [ テーブル - 名前 ] ( [ 列1 - 名前 ] [ 列 2 - 名前 ] [ 列3 - 名前 ] )
選択する [ 値1 ] [ 値2 ] [ 値3 ]
どこ いいえ 存在する ( 選択する * から [ テーブル - 名前 ] [ - 名前 ] = [ 表現 ] ) ;

ユーザーが従業員テーブルに値を含む行を挿入したい場合の例を見てみましょう。 1 」、「 アメリカ人 ' と ' アンリオット 」列の「 ID 」、「 会社名 ' と ' 連絡先 ' それぞれ。ただし、id が「 1 」がテーブルに見つからないか、存在しません。その特定のケースでは、クエリは次のようになります。



選択する * から 職員;

入れる の中へ 職員 ( ID 会社名 連絡先 )
選択する 1 「アメリカン」 「アンリオット」
どこ いいえ 存在する ( 選択する * から 職員 どこ ID = 1 ) ;

出力には、「 ID ' に等しい ' 1 」はすでに存在していました。

「ON DUPLICATE KEY UPDATE」句を使用してデータが存在しない場合にのみ新しい行を挿入する

さて、別の方法は、「 重複キーの更新について ” 句。この句は、「if-else」実行を形成する「INSERT INTO」クエリで使用されるためです。これは、テーブル内のデータが一意である場合にのみ更新されることを意味します。それ以外の場合、変更は発生しません。この一般的な構文は次のとおりです。

入れる の中へ [ テーブル - 名前 ] ( [ 列1 - 名前 ] [ 列 2 - 名前 ] [ 列3 - 名前 ] ) ( [ 値1 ] [ 値2 ] [ 値3 ] )
の上 複製 アップデート [ 列1 - 名前 ] = [ 列1 - 名前 ] ;

「」に値を挿入する例を見てみましょう。 2 」、「 パスカル 」、「 ニクソン 」、「 ロンドン 」、「 イギリス ' と (171) 555-7788 「表中」 お客様 ” 列について “ ID 」、「 ファーストネーム 」、「 苗字 」、「 」、「 ' と ' 電話 ' それぞれ。行がまだ存在しない場合は、挿入されます。それ以外の場合は、「 ID=ID 」の条件を満たしています。次のクエリを実行します。

選択する * から お客様 ;
入れる の中へ お客様 ( ID ファーストネーム 苗字 電話 )
( 2 「パスカル」 「ニクソン」 「ロンドン」 'イギリス' 「(171) 555-7788」 )
の上 複製 アップデート ID = ID;

これは、クエリを実行する前のテーブルです。「 ID ' に等しい ' 2 ' 存在しない:

クエリを実行すると、このクエリはテーブルに新しい行を挿入します。

クエリを実行する前にデータが存在しないため、新しい行が正常に挿入されました。

結論

MySQL では、「 挿入 無視 」ステートメントまたは「 存在しない場所 」の節 に挿入 ' 声明。これを行う別の方法は、「 重複キーの更新について 」の節 に挿入 行がすでに存在する場合に更新するステートメント。それ以外の場合は、新しい行を追加します。この投稿では、データが存在しない場合にのみ新しい行を挿入する方法について説明しました。