MySQLInsertは重複キーを無視します

Mysql Insert Ignore Duplicate Key



多くの場合、テーブルまたは結果セットに競合するデータがあります。また、修正には時間がかかり、繰り返しの記録は避ける必要があります。重複するレコードを識別し、いずれかのテーブルからそれらを削除する必要があります。このセクションでは、重複データがテーブル内に表示されないようにする方法と、現在の重複レコードを削除する方法について詳しく説明します。このガイドでは、エラーを回避するためにINSERTIGNORE句を使用する方法を学習します。

構文:

INSERTIGNOREクエリの構文は次のとおりです。







>>table_nameにIGNOREを挿入((col1、col2、col3)。((value_list)。((value_list)。((value_list)。;

Workbenchを介してIGNOREを挿入します。

システムからMySQLWorkbench 8.0を開き、データベースインスタンスに接続します。





コマンド領域で、4つの列を持つテーブルEmployeeを作成する必要があり、そのうちの1つをUNIQUEとして指定する必要があります。このテーブルを作成するには、ナビゲータークエリ領域で以下のクエリを試してください。クエリ全体を選択し、フラッシュサインをクリックして実行します。





>>CREATETABLE従業員((ID int PRIMARY KEY NOT NULL、名前varchar((50)。NULLではありません、Age Varchar((50)。、給与varchar((50)。、 個性的((ID)。)。;

作成時に、データベースデータの下の[テーブル]オプションの下のリスト内にテーブルemployeeを見つけることができます。



グリッドビューでは、クエリを入力せずにレコードを入力できます。したがって、テーブルemployeeのグリッドビューを開き、以下に示すようにいくつかのレコードを追加します。重複することなく、すべての一意のレコードを入力しました。 [適用]ボタンを押して変更を適用します。

上記で入力したレコードに関連するクエリを含む新しいウィンドウが開きます。この画面はレビュー画面と呼ぶことができます。何かを変更したい場合は、ここで行うことができます。それ以外の場合は、[適用]ボタンを押してクエリを実行します。

ご覧のとおり、クエリは正常に実行され、レコードはデータベースとそのテーブルEmployeeに保存されています。列IDに重複する値を追加すると、エラーが発生します。 [完了]ボタンをタップします。

これはすべてグリッドビューに関するものでした。次に、クエリ領域を介してレコードを挿入します。その間、今回は出力を確認するために重複レコードを挿入しています。そこで、以下のINSERTクエリを試しました。ここでは、2つの値のリストがあります。両方の値のリストは、「ID」列に同じ値があります。クエリを選択し、フラッシュサインを押してクエリを実行します。

クエリは正しく機能せず、画像に表示されているようにINSERTコマンドの値が重複しているためエラーが発生します。

次に、INSERT IGNORE句を使用して上記と同じクエリを試し、提示されたとおりに実行します。

出力領域にエラーは生成されないことがわかりますが、コマンドに重複する値が含まれていることを警告します。

テーブルEmployeeのグリッドビューを更新します。 INSERTIGNOREクエリは半分機能しました。最初の値のリストをテーブルに挿入しましたが、値13が繰り返されているため、2番目の値のリストは無視されています。

コマンドラインシェルを介してIGNOREを挿入します。

この概念を理解するために、システムでMySQLコマンドラインクライアントシェルを開いてみましょう。尋ねたら、MySQLパスワードを入力して作業を開始します。

次に、テーブルを作成します。以下のコマンドを試してください。列の1つにUNIQUE制約があるときに、「minister」という名前のテーブルを作成しました。列IDが一意の値のみを受け入れ、重複する値を受け入れないことは明らかです。

>>CREATE TABLE data.minister((Mid INT PRIMARY KEY UNIQUE NOT NULL、名前VARCHAR((フォーファイブ)。、City VARCHAR((フォーファイブ)。)。;

クエリは適切に機能し、テーブルが作成されました。 INSERT IGNORE句を理解するには、最初に単純なINSERTコマンドが機能していることを確認する必要があります。 INSERTコマンドを使用して複数の情報データをテーブルに挿入している場合、MySQLはトランザクションを一時停止し、処理中にエラーが発生すると例外を生成します。結果として、テーブルには行が追加されていません。以下に示すクエリを使用して、テーブル大臣に最初のレコードを挿入しましょう。テーブルは現在空白であり、対応するレコードがないため、クエリは正常に機能します。

列IDがUNIQUEであるため、コマンドラインシェルで以下の命令を実行しようとすると、エラーが発生します。これは、前のクエリで値11を追加したためであり、UNIQUEキーのため、繰り返された値を再度追加することはできません。

したがって、テーブルを確認すると、最初のINSERTクエリによって追加されたレコードがテーブルに1つしかないことがわかります。

>>選択する*FROM data.minister;

逆に、INSERT IGNORE句を使用している場合、エラーをトリガーする誤ったデータ行は見落とされ、正確なデータ行のみが入力されます。以下のコマンドでは、INSERT IGNOREコマンドを使用して、テーブルに繰り返し値が追加されないようにし、エラーを見落としています。ご覧のとおり、最初の値のリストには、前のクエリと同じ重複値11があります。 2番目の値のリストは一意ですが、テーブルに挿入された1つのレコードが表示されます。これは、2番目の値のリストです。 MySQLは、1つのレコードのみが挿入されたことも示し、メッセージに1つの警告が生成されます。次に、INSERT IGNORE句を使用している場合、MySQLが警告を提供すると想定できます。

以下の出力からわかるように、このテーブルには2つのレコードしかありません。上記のクエリで提供された最初の値のリストですが、見落とされています。

>>選択する*FROM data.minister;

結論:

MySQLWorkbenchおよびMySQLコマンドラインクライアントシェルを介して重複値に対してINSERTIGNOREの必要なすべての例を実行しました。