質問: $this->モデルA->getDataSource(); $dataSource->begin(); //何らかの処理 //テーブルAに対する処理 if(失敗){ $dataSource->rollback(); } else { $dataSource->commit(); } } ``` 上記のような条件の時に`//何らかの処理`の位置まではマルチプロセスとして並列で実行されるのですが、`//テーブルAに対する処理`に差し掛かるところで、あとからそこに到達した処理が止まります。 その位置で処理が止まる条件は、子プロセスaが`//テーブルAに対する処理`を行っている際に子プロセスbが`//テーブルAに対する処理`に至ることです。 なお、子プロセスaが`//テーブルAに対する処理`を終了した時点で、子プロセスbの`//テーブルAに対する処理`が開始され、それがループするような状態です。 これらの挙動に対して、私が実現したいことは子プロセスaと子プロセスbの`//テーブルAに対する処理`が同時に動くなのですが、それは可能なのでしょうか。 拙い文章で申し訳ないですが、回答お待ちしております。 ### バージョン MySQL5.5.62 CakePHP2 PHP5.3.3
回答: MySQLのバージョンが5.3.3ということは、テーブルは全てMyISAMかと思います。 MyISAMでは、insert, update, delete等の書き込みを行う際にテーブルをデッドロックします。 ~~MySQLのバージョンを5.5以上に上げて、~~テーブルをInnoDBにすることで行単位のデッドロックにすることができます。~~が、現在のMySQLのバージョンでは不可能かと思います。~~