トランザクション処理の勉強のために複数セッションを作って同時にDB書き込みする(複数の人が同時にmysqlに書き込みをするような)ようなコードを書きたいのですが、どのようにソースコードを書けばよいでしょうか?
サイトを複数タブで開いて、ボタンを両方の画面で押してプログラム実行では同時ではないので、ほぼ同時にプログラム実行をするにはどうすればよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
MySQL的のトランザクション的にはapacheのプロセスやスレッドは関係無くて、MySQLとのコネクションが複数あってその操作が制御されてればトランザクションの挙動は確認出来るかと思います。
PHP
1 2$pdo1 = new PDO(); 3$pdo2 = new PDO(); 4 5$pdo1->beginTransaction(); 6$pdo2->beginTransaction(); 7 8//以下、それぞれ任意の処理を任意の順番で実行して挙動を確認する 9
もしくは、確認したい挙動はおそらく、コミットやロールバック前に他の操作がされた場合の挙動でしょうから
PHP
1//先にアクセスするスクリプト 2$this->db->beginTransaction(); 3--いろいろ処理-- 4$sql->execute(); 5$stmt->closeCursor(); 6sleep(10); 7$this->db->commit();
と
PHP
1//あとからアクセスするスクリプト 2$this->db->beginTransaction(); 3--いろいろ処理-- 4$sql->execute(); 5$stmt->closeCursor(); 6$this->db->commit(); 7
みたいな感じで任意の場所でsleepさせてやれば、割り込み的に処理がされる箇所を制御出来ますね。
投稿2015/11/19 09:18
総合スコア18713
0
ランダムな時間間隔でDB(mysql)にデータを書き込むようなプログラムを作成し、そのプログラムを複数のプロセスで実行する(Shellのウィンドウを複数起動して、それぞれでDBに書き込みをするプログラムを走らせる)のが、複数のスレッドやプロセスを扱うプログラムを作らなくて良いので簡単だと思います。
時間間隔をランダムにしたのは、ほぼ同時の書き込みが起きる事が期待できるからです。
投稿2015/11/19 08:43
総合スコア6915
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
プログラム内で2つスレッドを立てて実行する手法か、
あるいはコミットやロールバックをわざとしない手法がありますね。
投稿2015/11/19 08:28
総合スコア856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/19 08:38
2015/11/19 08:44
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/19 10:58