2011-01-05 15 views
3

私は、自動インクリメントPRIMARY KEYを使ってmysqlデータベースにテーブルを持っています。定期的にこの表の行が削除されています。その結果、最新の行のPKの値は非常に高速になりますが、この表にはそれほど多くの行はありません。プライマリインデックスを再計算する方法は?

私がやりたいことは、このようにして最初の行にPK = 1、2番目にPK = 2というように「再計算」することです。このテーブルのPKには外部依存関係がないため、安全です。

これはMySQLのクエリ/ツールのみを使用して実行できますか?それとも私のコードからやる必要がありますか?

+2

ない「PKの外部依存関係が」存在しない場合は、なぜあなたは、インデックスが必要なのでしょうか? – Simon

答えて

10
set @pk:=0; 

update 
    your_table 
    set [email protected]:[email protected]+1 
    order by pk;  <-- order by original pk 

私の意見では、大きなサロゲートキーを使用するのは問題ありません。おそらく、最大許容整数をすべて使い果たしてしまう可能性は低いです。あなたは署名なしでそれを倍増させることができると考えてください。

-1

これはあなたの問題を解決する必要があります。要するにhttp://www.liewcf.com/mysql-reset-auto-increament-number-115/ を:あなたは、あなたが最初のテーブルからレコードを削除する必要があり、これを1にリセットするためにALTER TABLEのtable_tablenameのAUTO_INCREMENT = 1を使用するか、または最低値に自分のIDを変更することができます。

0

は、再計算した後、テーブルにAUTO_INCREMENT値を変更することを忘れないでください:

mysql> SELECT @pk; 
+------+ 
| @pk | 
+------+ 
| 9911 | 
+------+ 
1 row in set (0.00 sec) 


ALTER TABLE your_table AUTO_INCREMENT = 9912; 
関連する問題