2011-06-22 14 views
2

mysqlに関する質問があります。ここで私はテーブルを持っているシナリオmysqlの範囲内で一意の番号を生成する方法

は商人を言っています、それは今、私は、各加盟店の顧客を格納するテーブルを持っており、それがフィールド

cusid, cus_merid, cus_cusno,email... 

を持って、次のフィールド

merid , mer_cusno_start, mer_cusno_end, .. 

を持っています新しい顧客が加盟店にサインアップしているときに、cus_cusnoを生成する必要があります。この加盟店によって指定された範囲内にある必要があります(mer_cusno_start - mer_cusno_end)。

んが2人の顧客は、(異なる商人の顧客が cus_cusno同じを持つことができる)、同じ商人のため cus_cusno同じを持つべきではありません。番号は連続的である必要はありません。しかし、範囲の間に来る必要があります。

複数の顧客が同じマーチャントに同時にサインアップしようとしている可能性を考慮して、並行性の問題のないmysqlでどのように実装できますか?

事前に感謝

Sandheep

+0

を追加しますか?それが通常どおりに行われます。 – Jacob

+1

私はあなたの質問に適切な回答を見つけようとしますが、私のアドバイスを取ってください:merchantId、merchantCustomerNo、customer_idのようなわかりやすい名前でフィールドに名前を付けてください。私は急いで作ったデータベースで不幸な経験をしていましたが、それは悪夢であり、5〜6のアプリケーションをサポートしているときにはあなたにとって素晴らしいことだと信じています。 –

+0

最初の考えは、衝突を避けるために '(cus_merid、cus_cusno)'テーブル( 'customer'')にUNIQUE INDEXを持つことです(同じcustomerNoと同じmerchantIDを持つ2人の顧客)。 –

答えて

0

あなたの顧客数にいくつかのシーケンシングを追加するためにPHP microtimeを使用することができます。この方法では、時計が走り続ける限り、衝突は起こり得ません。

代わりにちょうど最後cus_cusnoが何であったかどうかをチェックし、あなただけのmerid` `への顧客テーブルの外部キーで商人に顧客をリンクしていないのはなぜ1.

+0

質問に 'PHP'の言及はありません。なぜあなたはPHPを使用することをお勧めしますか?そして、ソリューションが衝突を回避する方法は? –

+0

私は彼の質問を正しく理解していれば、最後の顧客は私が別の商人にサインアップしているので、彼はcus_cusnoに1を加えることはできません。 – Jacob

関連する問題