sql >> データベース >  >> RDS >> Mysql

INSERT IGNOREは、挿入を無視してもテーブルをロックしますか?

    エンジンによって異なります-MyIsamとInnoDbは異なる動作をします。

    MyIsamテーブルの場合、レコードがテーブルにすでに存在する場合(まだコミットされていない場合でも)、同じレコードの通常のINSERT(他のセッションの同じ一意のキー)が重複キーエラーを報告するため、INSERTIGNOREはエラーを無視して先に進みます。

    InnoDBテーブルでは、レコードがロックされていない場合、通常のINSERTはすぐに実行されます重複キーエラーを報告します(INSERT IGNOREはエラーをスキップして続行します)。
    ただし、レコードが他のセッションによってロックされている場合(たとえば、レコードが挿入されているがまだコミットされていない場合、またはレコードがUPDATE、DELETE、またはSELECT FOR UPDATEコマンド)の場合、INSERTコマンドは「ハング」し、他のセッションが(COMMITまたはROLLBACKによって)ロックを解除するまで待機します。次に、ロックを解除した後もレコードがまだ存在する場合、INSERTはエラーを報告します(INSERT IGNOREはエラーを無視します)が、レコードが存在しない場合、INSERTはこのレコードをテーブルに追加します。

    IGNOREキーワードは、「エラーが発生した場合は無視してください」とだけ言っていますが、ロック動作には影響しません。




    1. PHPでPostgreSQLに接続できないpg_connect()

    2. NHibernateでNUMBEROracleデータ型をマッピングするのに最適な.NETデータ型はどれですか?

    3. MySQLテーブルを2番目のドライブに移動できますか?

    4. 警告:入力に予期しない文字が含まれています:(ascii =29)state =0 in