web-dev-qa-db-ja.com

MySQLでAUTO_INCREMENTをリセットする方法

どのように私は reset フィールドのAUTO_INCREMENTをリ​​セットできますか?もう一度1からカウントを始めたいと思います。

1092
some Folk

あなたは、カウンタをリセットすることができます:

ALTER TABLE tablename AUTO_INCREMENT = 1

InnoDBの場合、auto_increment値を現在の最高インデックス以下に設定することはできません。 ( ViralPatel から引用):

すでに使用されている値以下の値にカウンタをリセットすることはできません。 MyISAMの場合、値が現在AUTO_INCREMENTカラムにある最大値以下の場合、値は現在の最大値に1を加えた値にリセットされます。 InnoDBの場合、値が列の現在の最大値より小さい場合、エラーは発生せず、現在のシーケンス値は変更されません。

を参照してください。他のテーブルのMAX値を使用してMySQL自動インクリメントをリセットするにはどうすればいいですか?許容値を動的に取得する方法について。

1800
Niels
ALTER TABLE tablename AUTO_INCREMENT = 1
137
boobiq
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

これでうまくいくと思います

65
nghiepit

単にこのように:

ALTER TABLE tablename AUTO_INCREMENT = value;

参照: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

53
fyr

enter image description herePhpmyadminには「操作」タブの下に非常に簡単な方法があります、あなたはテーブルオプションで、あなたが望む数に自動増加を設定することができます。

38
Miles M.

私のために働いた最良の解決策:

ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;

その速い、innoDBで動作し、そして私は現在の最大値を知る必要はありません!このように自動インクリメントカウンタはリセットされ、存在する最大値から自動的に開始されます。

31
trust_words

に与えられた良いオプションがあります - MySQL自動インクリメント列をリセットする方法

ALTER TABLE tablename AUTO_INCREMENT = value;はInnoDBではnotを動作することに注意してください

19
Naz

この質問に対する最高評価の回答はすべて、 "ALTER yourtable AUTO_INCREMENT = value"を推奨しています。ただし、これは、変更内のvalueがオートインクリメント列の現在の最大値よりも大きい場合にのみ機能します。 MySQL 8のドキュメントによると

現在使用されている値以下の値にカウンタをリセットすることはできません。 InnoDBとMyISAMの両方で、値が現在AUTO_INCREMENT列にある最大値以下の場合、値は現在の最大AUTO_INCREMENT列の値に1を加えた値にリセットされます。

要するに、質問の2番目の部分でOPが尋ねるので、AUTO_INCREMENTを変更してautoincrement列の値を増やすことだけができ、1にリセットすることはできません。 AUTO_INCREMENTを現在の最大値から実際に下に設定できるオプションについては、 自動インクリメントの主キーの並べ替え/リセット を参照してください。

18
lreeder

MySQL 5.6で機能が変更されたため、アップデートを追加します。 MySQL 5.6以降、InnoDBでは単純なALTER TABLEを使用できます。

ALTER TABLE tablename AUTO_INCREMENT = 1;

これを反映するようにドキュメントが更新されました。

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

私のテストはまたテーブルがコピーされていないことを示しています、値は単に変更されます。

18
SeanN
ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

私のスクリプトの中ではこれを使用しました。idフィールドは削除されて以前の設定で追加され、データベーステーブル内に存在するすべてのフィールドは新しい自動インクリメント値で埋められます。これはInnoDBでも動作します。

テーブル内のすべてのフィールドが再集計され、他のIDを持ちます。

12
Alin Razvan

次のような構文TRUNCATE tableを使うこともできます。TRUNCATE TABLE table_name

BEWARE !! TRUNCATE TABLE your_table すべてを削除します /あなたのyour_tableに!

11
Manohar Kumar

空のテーブル用です。

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

データがあっても整理したい場合は、これを使用することをお勧めします。

ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD  `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);

これが私の解決策ですが、あなたの列が制約を持っているか、あるいは他のテーブルへの外部キーとして接続されている場合、これは悪い影響を与えるかあるいはうまく機能しないのでこれをすることをお勧めしません。

>まず、列を削除します

ALTER TABLE tbl_name DROP COLUMN column_id

> 2番目:最初の列にしたい場合は、列を再作成してFIRSTに設定します。

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

これはうまくいきます!

3
bdalina

あなたは単にシーケンスをリセットするためにテーブルを切り捨てることができます

TRUNCATE TABLE TABLE_NAME
1
Kunwar Babu

テーブルを変更してauto_incrementを1に設定しようとしましたが、うまくいきませんでした。インクリメントしていた列名を削除してから、好みの名前で新しい列を作成し、その新しい列を開始から増加するように設定しました。

1
andromeda

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

  1. 他の人がすでに説明したように、クエリを実行することによって:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

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

    次に、イメージに示すように、フィールドAuto incrementに希望の値を設定してください。これは基本的に最初のオプションで示されているクエリを実行します。

1
Kristijan Iliev

MySQL 5.6以降では、 online DDL (注algorithm=inplace)のために、以下のアプローチが速くなります。

alter table tablename auto_increment=1, algorithm=inplace;

1
artsafin

このクエリを実行してみてください

 ALTER TABLE tablename AUTO_INCREMENT = value;

またはこのクエリを試して、自動インクリメントをリセットします

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

自動インクリメントを設定してからこのクエリを実行します

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
0
Shabeer Sha

ALTER TABLEテーブル名AUTO_INCREMENT = 1

0
santosh mahule

私はグーグルしてこの質問を見つけました、しかし私が本当に探している答えは2つの基準を満たします:

  1. 純粋なMySQLクエリを使用する
  2. 既存のテーブルの自動インクリメントをmax(id)+ 1にリセットします

私がここで欲しいものを正確に見つけることができなかったので、私は様々な答えから答えを石畳にしてそれをここで共有しました。

注意すべきことはほとんどありません。

  1. 問題のテーブルはInnoDBです
  2. テーブルは、主キーとしてid型としてフィールドintを使用します。
  3. 純粋にMySQLでこれを行う唯一の方法は、ストアドプロシージャを使用することです。
  4. 以下の私の画像はGUIとしてSequelProを使用しています。あなたの好みのMySQLエディタに基づいてそれを適応させることができるはずです
  5. 私はこれをMySQLでテストしました Debian-linux-gnu用のVer 14.14 Distrib 5.5.61

手順1:ストアドプロシージャを作成する

このようなストアドプロシージャを作成します。

DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN

      SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
      PREPARE stmt FROM @get_next_inc; 
      EXECUTE stmt; 
      SELECT @next_inc AS result;
      DEALLOCATE PREPARE stmt; 

      set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
      PREPARE stmt FROM @alter_statement;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

それを実行してください。

実行前は、データベースのストアドプロシージャを見ると、このように見えます。

enter image description here

実行するときは、ストアード・プロシージャーを選択して「選択の実行」を押すだけです。

enter image description here

注:区切り部分は非常に重要です。したがって、この質問で選択した回答の上からコピーして貼り付けると、このような理由でうまく機能しないことがあります。

実行後、ストアドプロシージャが表示されるはずです

enter image description here

ストアドプロシージャを変更する必要がある場合は、ストアドプロシージャを削除してから再度実行することを選択する必要があります。

手順2:ストアドプロシージャを呼び出す

今回は単純に通常のMySQLクエリを使用できます。

call reset_autoincrement('products');

もともと私自身のSQLクエリのメモから https://simkimsia.com/library/sql-queries /#mysql-reset-auto -inc そしてStackOverflowに適応

0
Kim Stacks
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
0
Mihai Galan

最新のプラス1つのIDを更新する

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
0
narasimharaosp