2012-05-25 5 views
12

私はID付きのテーブルを持っています。このIDは自動インクリメントとプライマリキーです。初めてテーブルに挿入したとき、IDは0から始まりますが、そのテーブルの値を再度挿入すると、IDは0から始まらず、IDが最後に取得した値から始まります。何が間違っていますか? 値を0にリセットできますか?mysql IDの自動インクリメントが0から始まらない

+3

何も間違っていません。これは予想される動作です。あなたの車の走行距離計は、あなたが乗車するたびに0から始まりますか? –

+0

と私は何をすることができます、私は300以上の時間を私のテーブルに挿入しました。私は先生に宿題を見たときに、彼のクライアントが301から始まることを示すのは良いことではありません。 – LinCR

+1

スクリプトから挿入を行った場合は、テーブルを削除してからスクリプトを再実行することができます。インサートが手作業であった場合は、再挿入する必要はありませんか?とにかく、削除した一時的な/テストのクライアントが300ありました。私があなたの先生だったら、それは問題ではないでしょう。 –

答えて

16

あなたは切り捨てがテーブル内のデータをすべて削除します

TRUNCATE `table` 

を使用してテーブルを切り捨てることのいずれか。 TRUNCATEを使用すると、DELETEのようなDELETEトリガーも起動されないことに注意してください。

それとも

ALTER TABLE `table` AUTO_INCREMENT = 1 

を使用して、カウントをリセットすることができますしかしそれは正常な動作です。テーブルが本当に空でない限り、後者をしないでください。

+0

ありがとうございます – LinCR

1

auto_incrementを1から再起動するには、TRUNCATE文を使用する必要があります。 制動を回避するのは正常な動作です。

+0

あなたは私に例を挙げてくれますか?ありがとうございます – LinCR

+0

TRUNCATEテーブルがテーブルを破壊することに注意してください... – dAm2K

+0

TRUNCATE TABLE your_table_name – dAm2K

3

テーブル内のすべての要素を削除しても、主キーには影響しません。主キーは、それでも最後の値から自動インクリメントされます。

あなたは主キーをリセットしたい場合は、テーブルを切り捨てることを試みることができます。

TRUNCATE TABLE yourtable; 

これはyourtableからすべての要素を消去します。主キーをリセットするかどうかは、データベースによって異なります。 Mysqlでは、MysqlがTRUNCATEでテーブルを削除して再作成するので、動作するはずです。

+0

私はあなたを持っています、ありがとう – LinCR

5

最初に以下のリクエストを実行し、値が0で主キーを挿入するには:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
関連する問題