どのように私は reset フィールドのAUTO_INCREMENT
をリセットできますか?もう一度1
からカウントを始めたいと思います。
あなたは、カウンタをリセットすることができます:
ALTER TABLE tablename AUTO_INCREMENT = 1
InnoDBの場合、auto_increment
値を現在の最高インデックス以下に設定することはできません。 ( ViralPatel から引用):
すでに使用されている値以下の値にカウンタをリセットすることはできません。 MyISAMの場合、値が現在AUTO_INCREMENTカラムにある最大値以下の場合、値は現在の最大値に1を加えた値にリセットされます。 InnoDBの場合、値が列の現在の最大値より小さい場合、エラーは発生せず、現在のシーケンス値は変更されません。
を参照してください。他のテーブルのMAX値を使用してMySQL自動インクリメントをリセットするにはどうすればいいですか?許容値を動的に取得する方法について。
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
これでうまくいくと思います
単にこのように:
ALTER TABLE tablename AUTO_INCREMENT = value;
Phpmyadminには「操作」タブの下に非常に簡単な方法があります、あなたはテーブルオプションで、あなたが望む数に自動増加を設定することができます。
私のために働いた最良の解決策:
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で動作し、そして私は現在の最大値を知る必要はありません!このように自動インクリメントカウンタはリセットされ、存在する最大値から自動的に開始されます。
に与えられた良いオプションがあります - MySQL自動インクリメント列をリセットする方法
ALTER TABLE tablename AUTO_INCREMENT = value;
はInnoDBではnotを動作することに注意してください
この質問に対する最高評価の回答はすべて、 "ALTER yourtable AUTO_INCREMENT = value"を推奨しています。ただし、これは、変更内のvalue
がオートインクリメント列の現在の最大値よりも大きい場合にのみ機能します。 MySQL 8のドキュメントによると :
現在使用されている値以下の値にカウンタをリセットすることはできません。 InnoDBとMyISAMの両方で、値が現在AUTO_INCREMENT列にある最大値以下の場合、値は現在の最大AUTO_INCREMENT列の値に1を加えた値にリセットされます。
要するに、質問の2番目の部分でOPが尋ねるので、AUTO_INCREMENTを変更してautoincrement列の値を増やすことだけができ、1にリセットすることはできません。 AUTO_INCREMENTを現在の最大値から実際に下に設定できるオプションについては、 自動インクリメントの主キーの並べ替え/リセット を参照してください。
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
私のテストはまたテーブルがコピーされていないことを示しています、値は単に変更されます。
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を持ちます。
次のような構文TRUNCATE
tableを使うこともできます。TRUNCATE TABLE table_name
BEWARE !! TRUNCATE TABLE your_table
は すべてを削除します /あなたのyour_table
に!
空のテーブル用です。
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
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
これはうまくいきます!
あなたは単にシーケンスをリセットするためにテーブルを切り捨てることができます
TRUNCATE TABLE TABLE_NAME
テーブルを変更してauto_incrementを1に設定しようとしましたが、うまくいきませんでした。インクリメントしていた列名を削除してから、好みの名前で新しい列を作成し、その新しい列を開始から増加するように設定しました。
テーブルの自動インクリメントカウンタは、2つの方法で(再)設定できます。
他の人がすでに説明したように、クエリを実行することによって:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Workbenchまたは他の視覚的データベース設計ツールを使用する。 Workbenchでそれがどのように行われるかを示すつもりです - しかし他のツールでもそれほど変わらないはずです。目的のテーブルを右クリックして、コンテキストメニューからAlter table
を選択します。下部には、テーブルを変更するために使用できるすべてのオプションがあります。 Options
を選ぶと、このフォームになります:
次に、イメージに示すように、フィールドAuto increment
に希望の値を設定してください。これは基本的に最初のオプションで示されているクエリを実行します。
MySQL 5.6以降では、 online DDL (注algorithm=inplace
)のために、以下のアプローチが速くなります。
alter table tablename auto_increment=1, algorithm=inplace;
このクエリを実行してみてください
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;
ALTER TABLEテーブル名AUTO_INCREMENT = 1
私はグーグルしてこの質問を見つけました、しかし私が本当に探している答えは2つの基準を満たします:
私がここで欲しいものを正確に見つけることができなかったので、私は様々な答えから答えを石畳にしてそれをここで共有しました。
注意すべきことはほとんどありません。
id
型としてフィールドint
を使用します。このようなストアドプロシージャを作成します。
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 ;
それを実行してください。
実行前は、データベースのストアドプロシージャを見ると、このように見えます。
実行するときは、ストアード・プロシージャーを選択して「選択の実行」を押すだけです。
注:区切り部分は非常に重要です。したがって、この質問で選択した回答の上からコピーして貼り付けると、このような理由でうまく機能しないことがあります。
実行後、ストアドプロシージャが表示されるはずです
ストアドプロシージャを変更する必要がある場合は、ストアドプロシージャを削除してから再度実行することを選択する必要があります。
今回は単純に通常のMySQLクエリを使用できます。
call reset_autoincrement('products');
もともと私自身のSQLクエリのメモから https://simkimsia.com/library/sql-queries /#mysql-reset-auto -inc そしてStackOverflowに適応
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
最新のプラス1つのIDを更新する
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);