2009-08-06 15 views

答えて

0

あなたはAUTO_INCREMENTが必要です。

99999でリセットすることは問題になるかもしれませんが、私はそれがそのように機能するというあなたの要求に疑問を呈します。

+0

行を削除したり、テーブルを切り捨てたり、列を再作成しない限り、 'auto_increment'をリセットする方法はないと思います。 – Eric

0

あなたがそれをリセットする必要がある場合は、トリガを作成することができます

create trigger auto_number before insert on `sometable` 
begin 
    new.autoid = coalesce((select max(autoid)+1 from sometable),0) % 1000000 
end 

基本的に、insertが発生したときに、これは単に次の最大IDとしてautoid列を設定します。しかし、それはモジュロを使用して、その数値が1,000,000で繰り返されることを保証します。

+0

これは動作しません。あなたはmax autoidを打つでしょうし、そしてmax(autoid)は定数になります。同じIDを繰り返し生成します。素晴らしいインデックスがある方が良いということは言うまでもなく、これは/ slow /です。 – derobert

+0

@derobert:....それはOPが求めているものです。 0〜99999を入力し、それをもう一度繰り返します。 – Eric

1

絶えずインクリメント数(例えば、標準AUTO_INCREMENT)を生成し(またはビュー経由で)データを選択するときに、MOD 100000を通してそれを実行します。

⋮ 
99998 % 100000 = 99998 
99999 % 100000 = 99999 
100000 % 100000 = 0 
100001 % 100000 = 1 
⋮ 

あなたが作成することで、これは透明にすることができます選択のためのビュー:

CREATE SQL SECURITY INVOKER VIEW whatever AS 
    SELECT 
    foo, bar, baz, autoid % 100000 AS autoid, taz 
    FROM base_table; 

は残念ながら、このビューはおそらく更新可能ではありません、あなたが送信する必要がありますので、MySQLは、INSTEAD OFトリガをサポートしていませんが、基になるテーブルに書き込みます。

+0

これを代わりにPHPに任せれば、それはちょうど良いと思いますか? – EddyR

+0

@EddyR:PHPにこれをさせる方がいいのではないでしょうか。なぜあなたはこれをしたいのですか? – derobert

関連する問題