ここで@Devartと@Catcallによる元の回答に同意しますが、OPといくつかのコメントを交換した後、いくつか追加したいと思います。
DELETE
まず、スキーマイメージ表現を、のクエリの影響を受けるテーブルのみに縮小しましたtbl_indentmaster
。
私が見ることができたものから、このスキーマ図には循環FK参照はありません。
また、OPは次のクエリを実行しました。
DELETE FROM tbl_indentmaster WHERE indentId IN (1,2,3,4,5,6,...,150,151,155,156,....)
これは、削除する行が非常に多いことです。さらに問い合わせると、OPは、クエリがの小さなサブセットに対して機能すると主張しますindentId
。
これから私たちは2つの可能性をとることができると思います:
- MySQLにはバグがあり(非常に可能性は低いですが可能性があります)、あなたのような大規模なクエリが
CASCADE DELETE
失敗します。[すでに投稿された][2]ではなく、新しいバグの可能性を示唆していることに注意してください。理想的には、削除する行数は重要ではありません。
- クエリ全体が失敗する原因となっている特定の
indentId
エントリがあります。tbl_indentmaster
ポイント(2)が実際の原因であることを考慮して、最初に問題の診断を試みることをお勧めします。DELETE
クエリを小さなチャンクに分割して、問題のあるIDを見つけることができます。
このスクリプトが(より大きなアプリケーションで)コードを介して定期的に実行する必要がある場合は、そこでもクエリをより小さなチャンクで実行することを検討する必要があります(おそらく、クエリごとに15 IDが適切な開始IMOです)。これを行うことに加えて、どのエントリが失敗しているかを正確に把握できるように、問題のあるIDのエラーをログファイルに記録することをお勧めします。