[PHP-users 30556] ADOdbライブラリのStartTrans( )とロックの関係について
kato @ officeants.net
kato @ officeants.net
2006年 10月 19日 (木) 12:26:08 JST
いつも拝見して、勉強させていただいております。
加藤と申します。
さて、
MYSQLデータベースにADOdbを使用して接続して
インターネットから注文を取るWEBアプリケーションを作成しております。
そこで下記のような処理をしているのですが、
=======================================================
■テーブル
「注文テーブル」
注文番号 (連番 ユニーク)
注文内容
「顧客テーブル」
顧客情報
■注文処理
1.$conn->StartTrans();
2.注文番号の取得=$conn->GetOne("select max(id) from 注文テーブル")+1
3.顧客情報の登録(Insert)
4.2で取得した注文番号で注文情報の登録
5.$conn->CompleteTrans();
=======================================================
さて、ここで質問なのですが、
万が一、2の注文番号取得後に、他の人が先に2と同一の注文番号で注文情報を登録
されるのかどうかということです。
試しに
1のトランザクションの開始時にロックを掛けてみると
$conn->Execute("LOCK TABLES 注文テーブル WRITE");
全くレスポンスが無くなりました。
これは、StartTrans()がトランザクション中の整合性は保たれるようにしてあるから
なのでしょうか?
どなたか、お分かりの方がいらっしゃいましたら、ご教授頂ければ幸甚でございま
す。
どうぞ、よろしくお願いいたします。
=======================================================
サーバーの環境ですが、
Apache/1.3.37
FreeBSD 4.7
PHP Version 4.4.4
mysql 4.1.21
となっております。
加藤
PHP-users メーリングリストの案内