エンジンによって異なります-MyIsamとInnoDbは異なる動作をします。
MyIsamテーブルの場合、レコードがテーブルにすでに存在する場合(まだコミットされていない場合でも)、同じレコードの通常のINSERT(他のセッションの同じ一意のキー)が重複キーエラーを報告するため、INSERTIGNOREはエラーを無視して先に進みます。
InnoDBテーブルでは、レコードがロックされていない場合、通常のINSERTはすぐに実行されます重複キーエラーを報告します(INSERT IGNOREはエラーをスキップして続行します)。
ただし、レコードが他のセッションによってロックされている場合(たとえば、レコードが挿入されているがまだコミットされていない場合、またはレコードがUPDATE、DELETE、またはSELECT FOR UPDATEコマンド)の場合、INSERTコマンドは「ハング」し、他のセッションが(COMMITまたはROLLBACKによって)ロックを解除するまで待機します。次に、ロックを解除した後もレコードがまだ存在する場合、INSERTはエラーを報告します(INSERT IGNOREはエラーを無視します)が、レコードが存在しない場合、INSERTはこのレコードをテーブルに追加します。
IGNOREキーワードは、「エラーが発生した場合は無視してください」とだけ言っていますが、ロック動作には影響しません。