私が正しければ、PDO トランザクションは実際にはトランザクションではありません。自動コミットをオフにするだけです (ドキュメントを参照)。
したがって、行を削除するトランザクション A と同じ行を変更するトランザクション B がある場合、次のことが発生する可能性があります。
- トランザクション A が開始され、自動コミットがオフになります。
- トランザクション B が開始され、自動コミットがオフになります。
- トランザクション A が行を削除します。
- トランザクション B は同じ行を変更します。
- トランザクション A が終了し、変更をコミットします。
- トランザクション B が終了し、変更をコミットします。
しかし、ステップ 6 では、行はステップ 5 で既に削除されています。
また、トランザクション A がコミットされるまでトランザクション B を確実にブロックするにはどうすればよいですか? 参考までに、私は innoDB で mysql で PDO を使用しています。
ありがとうございました。