2016-06-11 6 views
1

私はテーブルがあると言うことができます。自動増分6-8パターンで一意の数字を生成するmysql

接尾辞と接尾辞を複合キーとして生成し、6-8のパターンにする必要があります。私の主キーはまだIDです。これらの2つの列は、参照番号として使用される。

Prefix-Suffix 
000000-00000000 
000000-00000001 
000000-00000002 
... 
000000-99999999 
000001-00000000 
000001-00000001 
000001-00000002 
... 
567889-48329484 

など。理想的には、これは自動インクリメントです。これを行う最善の方法は何ですか?私は最初にステージングテーブルを使用していました。ここでは、8パターンの関数で生成した数値を入力し、格納していたステージングテーブルのカウントに基づいてデータベース外の6パターンプレフィックスを自動的にインクリメントします使用済みの数字を切り捨ててリンス/リピートしますが、シンプルな自動インクリメントのソリューションが必要です。これは可能ですか?

私はコンポジットキーの読み込みを行っていますが、私はすでに別のプライマリキーを使用していないので、私は現在の方法の外でこれをどうやって行うことができないのか分かりません。

どのような考えですか?

答えて

0

接頭辞接尾辞パターンは、通常の整数主キーと等価です。

サフィックスの長さが1桁(例では8桁)であるとします。これは簡単に説明します。あなたが見ることができるように

prefix | suffix | key 
000000 | 0  | 0 
000000 | 1  | 1 
000000 | 2  | 2 
... 
000000 | 9  | 9 
000001 | 0  | 10 
000001 | 1  | 11 

、我々はすべての接頭接尾語の組み合わせを列挙し、それぞれの整数を割り当てることができます。

しかも、その整数を考えると、我々はそれが対応する接頭接尾語の組み合わせを導出することができます

key 57 = suffix 7, prefix 5 
key 99 = suffix 9, prefix 9 

我々は8桁のサフィックスを使用していた場合は、何も本当に変わりません。数式はsuffix = key % (MAX_PREFIX + 1)%はモジュラスまたは "残余"演算子である)とprefix = (key - suffix)/(MAX_PREFIX + 1)のままです。

私がやってお勧めするのは、通常の自動インクリメントのプライマリキーを使って、上記のようにプレフィックス/接尾辞を派生させることです。データベースに格納されている派生カラムを実際に使用したい場合は、それらのカラムにデータを入力するON INSERTトリガーで行うことができます。

プライマリキーを使用できない場合は、通常のシーケンス番号を使用してください。重要な点は、「2つの価値」について心配する必要がないことです。表示するためにどのように分割するかにかかわらず、ここには1つのシーケンスしかありません。

関連する問題