web-dev-qa-db-ja.com

MySQLの自動インクリメントカウンタを変更するにはどうすればよいですか?

私の主キーであり、単なるintフィールドであるIDフィールドがあります。

行未満ですが、今度は誰かがサインアップするたびに11800089、11800090など...それが(310,311,312)の順序に従うことができるように戻ってくるようにします。

ありがとう!

30
Chris Olson
ALTER TABLE tbl AUTO_INCREMENT=310;

ただし、IDを繰り返す必要はありません。数値がこれほど高い場合、彼らはどういうわけかそのようになりました。低いID番号にデータを関連付けないようにしてください。

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

49
Brad

より迅速な方法があるかもしれませんが、これは、IDを再作成していることを確認するための方法です。

MySQLまたは他のSQLサーバーを使用している場合、以下を行う必要があります。

  1. データベースのバックアップ
  2. Id列をドロップします
  3. データをエクスポートする
  4. TRUNCATEまたは 'Empty'テーブル
  5. id列をauto_incrementとして再作成します
  6. データを再インポートする

これにより、既存の行のIDが破壊されるため、これらが重要な場合、実行可能なオプションではありません。

3
ctrl_freak

PHPを使用しているため、mysqlを使用していると推測します。次のようなステートメントでauto_incrementをリセットできます。

 alter table mytable autoincrement=301;

ただし注意してください-auto incの値が重複すると物事が壊れるので

1
Adrian Cornish

テーブルの自動インクリメントカウンターは、次の2つの方法で(再)設定できます。

  1. 既に説明した他の人と同様に、クエリを実行することにより:

    _ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;_

  2. ワークベンチまたは他の視覚的なデータベース設計ツールを使用します。 Workbenchでそれがどのように行われるかを示しますが、他のツールでもそれほど変わらないはずです。目的のテーブルを右クリックして、コンテキストメニューから_Alter table_を選択します。下部には、テーブルを変更するために使用可能なすべてのオプションが表示されます。 Optionsを選択すると、次のフォームが表示されます。 enter image description here

    次に、画像に示すように、フィールド_Auto increment_に目的の値を設定します。これにより、基本的に最初のオプションに示されているクエリが実行されます。

1
Kristijan Iliev

Mysqlはidに対してselect maxを実行し、次を設定すると信じています。テーブルのIDを目的のシーケンスに更新してみてください。あなたが持っている問題は、それらがリンクされている場合、fkの更新にカスケードを配置する必要があるということです。私の頭に浮かぶクエリは次のとおりです。

UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)

700は、11800090より小さく、WHERE id> 0の300近くです。

あなたがどこにも入れないとmysqlの苦情があると思います

0
marspzb

私は同様の問題で遊んでいて、この解決策を見つけました:

SET @newID=0;
UPDATE `test` SET ID=(@newID:=@newID+1) ORDER BY ID;
SET @c = (SELECT COUNT(ID) FROM `test`);
SET @s = CONCAT("ALTER TABLE `test` AUTO_INCREMENT = ",@c);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  

同様の状況にある人の助けになることを願っています!

0
Harald Wirth