おそらく疑似乱数で十分でしょう。
alter table t
add id5 as ((id * 19379 + 62327) % 99991)
数字は100000未満の任意の素数です。
これは素数のために証明することはかなり簡単です:彼らは素数なので、数字は1と99991.
EDIT間の値のために繰り返してはなりません。そのID1を想定し、ID2が同じ値を持っている:
(id1 * 19379 + 62327) % 99991) = n
(id2 * 19379 + 62327) % 99991) = n
そして、それらを引く:
(id1 - id2) * 19379 % 99991 = 0
確かに、あなたはこの時点では数論のビットを必要とします。しかし、2つの素数(19,379と99,991)には共通点はありません。ですから、id1 - id2
が99,991の倍数である場合は、これが真となる唯一の方法です。
(その逆は明確に定義されているので、あなたが何ができるかを技術的には、19379による除算である。逆関数は常にモジュロ演算で明確に定義されていないが、彼らは分裂しているときが許可されている。)
こと後者の条件数字が繰り返されないという幻想的な方法です。
EDIT:
あなたは5桁の数字をしたい場合は、あなたが% 89989
を使用し、その結果に万を追加することができます。
何行ありますか? 5桁で10万行になります。 –
6000行以上はありません – user979331
基本的には、auto_increment unique id列のように挿入時に生成されるためです。 – user979331