私はInnoDBデータベースでmysqlを使用しています。MYSQL - Locking - InnoDB
すべてのトランザクションが挿入と選択(更新なし)の場合は、SQLのデッドロックについて心配する必要はありません。
デッドロックが発生するシナリオはありません。インサートとセレクトのみを行うと、デッドロックが発生しないと見なすのは正しいですか?
は適切ではないかもしれませんが、すべてのトランザクションは、PDO
私はInnoDBデータベースでmysqlを使用しています。MYSQL - Locking - InnoDB
すべてのトランザクションが挿入と選択(更新なし)の場合は、SQLのデッドロックについて心配する必要はありません。
デッドロックが発生するシナリオはありません。インサートとセレクトのみを行うと、デッドロックが発生しないと見なすのは正しいですか?
は適切ではないかもしれませんが、すべてのトランザクションは、PDO
あなたはまだSQLのデッドロックを心配する必要は番号で行われます。
デッドロックは、単一の行を挿入するトランザクションの場合でも発生します。これは、挿入操作が本当にアトミックではなく、挿入された行の(場合によっては複数の)索引レコードにロックが自動的に設定されるためです。
'INSERT INTO ... VALUES'文だけを実行すると、デッドロックが発生する可能性がありますか?あなたは例を挙げることができますか? –
この場合、デッドロックが発生するかどうかは実際には関係ありません。 INSERT VALUESを使用しているのかINSERT SELECTを使用しているのかにかかわらず、インサートはインデックスの一部をロックしている可能性があります。 –
トランザクションによって行やテーブル、またはインデックスがロックされることがあります。しかし、トランザクションの種類によってロックのタイプが異なります。これはデッドロックの発生方法と関係があります。 –
InnoDB MySQLストレージエンジンには行レベルのロックがあり、MyISAM MySQLストレージエンジンにはテーブルレベルのロックがあります。 MyISAMは単にテーブル全体をロックし、トランザクションをサポートしないので、データベースレベルのデッドロックを持つことはできません。アプリケーションは、両方のアクセスしようとしているテーブルのテーブルロックに座って別のアプリケーションをロックすることができますが、これはコードレベルのエラーであり、dbレベルの「デッドロック」ではありません。
InnoDBはトランザクションをサポートしており、行レベルのロックを持っているため、dbレベルのデッドロックが発生する可能性があります(ビジー状態のシステムで時折発生する可能性があります。 MySQLが「デッドロック」と呼ぶものの多くは、遅いUPDATEが行ロックのタイムアウトを引き起こす原因と同じくらい「真のデッドロック」ではありません。
異なるINSERTステートメントがあります:INSERT ... VALUES ...、INSERT ... SELECT ... '。両方を使用するのか、最初の変種のみを使用しますか? –
「INSERT ... ON DUPLICATE KEY UPDATE」もあります。私はあなたがそれを持っていないと思います。 –
これは特定のトランザクション分離レベルについての質問ですか?または一般的なもの(すべてについて)? –