[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 メーリングリストの案内