フィールドのをリセットするにAUTO_INCREMENT
はどうすればよいですか?もう一度
数え始めて欲しい1
。
TRUNCATE TABLE yourTableName;
フィールドのをリセットするにAUTO_INCREMENT
はどうすればよいですか?もう一度
数え始めて欲しい1
。
TRUNCATE TABLE yourTableName;
回答:
次のコマンドでカウンターをリセットできます。
ALTER TABLE tablename AUTO_INCREMENT = 1
InnoDBの場合auto_increment
、現在の最高インデックス以下の値を設定することはできません。(ViralPatelからの引用):
カウンタは、すでに使用されている値以下にリセットできないことに注意してください。MyISAMの場合、値が現在AUTO_INCREMENT列にある最大値以下の場合、値は現在の最大値に1を加えた値にリセットされます。InnoDBの場合、値が列の現在の最大値より小さい場合、エラーは発生せず、現在のシーケンス値は変更されません。
別のテーブルのMAX値を使用してMySQL AutoIncrementをリセットする方法を参照してください。許容値を動的に取得する方法について。
circular reference
curcular reference
ですか?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
これでうまくいくと思います
UPDATE
すべての値を更新しid
ます。
単にこのように:
ALTER TABLE tablename AUTO_INCREMENT = value;
リファレンス:http : //dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
これをデフォルト値に設定することを意味します... "value"を1で置き換えることができます
「操作」タブの下の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で動作し、現在の最大値を知る必要はありません!これにより、自動インクリメントカウンターがリセットされ、存在する最大値から自動的に開始されます。
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
で機能することを確認しますが、機能しALTER TABLE tablename AUTO_INCREMENT = 1
ません。
この質問に対する最高評価の回答はすべて、「ALTER yourtable AUTO_INCREMENT = value」を推奨しています。ただし、これvalue
は、変更が自動インクリメント列の現在の最大値よりも大きい場合にのみ機能します。 MySQL 8のドキュメントによると:
カウンタを現在使用中の値以下にリセットすることはできません。InnoDBとMyISAMの両方で、値が現在AUTO_INCREMENT列にある最大値以下の場合、値は現在の最大AUTO_INCREMENT列の値に1を加えた値にリセットされます。
本質的に、OPが質問の2番目の部分で尋ねるように、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
私のテストでは、テーブルがコピーされず、値が変更されるだけであることが示されています。
MySQLの自動インクリメント列をリセットする方法には、適切なオプションがあります。
InnoDBではALTER TABLE tablename AUTO_INCREMENT = value;
機能しないことに注意してください
DELETE
(またはROLLBACK
)はIDを回復しません。1つの例外:再起動(またはクラッシュ)した後、次のIDが計算されてMAX(id)+1
、削除されたID が最後に効率的に回復されます。例外の例外:MySQL 8.0はこれらのIDを未使用のままにします。
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
ような構文テーブルを使用することもできます。
TRUNCATE TABLE table_name
注意してください!! あなたのすべてTRUNCATE TABLE your_table
を削除しますyour_table
!!
TRUNCATE
もすべて削除することに注意してください!
TRUNCATE
auto_increment
フィールドもリセットしますか?私の使用例は、テーブルの古いデータを消去し、新しいデータのIDを1から再び開始することです(テストが完了した後で、適切に使用するためにテーブルを消去するとします)。私はDROP
テーブル全体とCREATE
それをもう一度しなければならないと思いました。
auto_increment
場合は、のDELETE FROM
代わりにを使用してくださいTRUNCATE
。
空のテーブル用です:
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`);
テーブルを変更してauto_incrementを1に設定しようとしましたが、機能しませんでした。増分していた列名を削除し、その後、優先する名前で新しい列を作成し、その新しい列を最初から増分するように設定することにしました。
テーブルの自動インクリメントカウンターは、次の2つの方法で(再)設定できます。
他の人がすでに説明したように、クエリを実行することによって:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
ワークベンチまたは他のビジュアルデータベースデザインツールを使用する。Workbenchでそれがどのように行われるかを示しますが、他のツールでもそれほど違いはないはずです。目的のテーブルを右クリックしてAlter table
、コンテキストメニューから選択します。下部には、テーブルを変更するために使用可能なすべてのオプションが表示されます。選択するOptions
と、次のフォームが表示されます。
次に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');
もともとはhttps://simkimsia.com/library/sql-queries/#mysql-reset-autoincにある自分のSQLクエリのメモからのもので、StackOverflowに適合しています
クエリブラウザーに移動して、次の操作を行うことをお勧めします。
テーブルに新しい行を入力すると、Auto_incrementが1にリセットされます。
auto_incrementフィールド値がすでに存在する行を追加しようとするとどうなるかわかりません。
この助けを願っています!
最良の方法は、AIを使用してフィールドを削除し、AIを使用して再度追加することです。すべてのテーブルで機能します