MySQLのAUTO_INCREMENT問題レコード

アウトライン

データベースアプリケーションでは、多くの場合、レコードを識別するために、自動インクリメント固有の番号で使用します。MySQLでは、AUTO_INCREMENT属性データ列によって自動的に生成することができます。利用可能な「AUTO_INCREMENT = N」オプションは、増分の初期値を指定するには、テーブルを構築することであってもよいです利用可能な「ALTERテーブルはTABLE_NAME AUTO_INCREMENT = N」するコマンドリセットコースの値を、起動のインクリメントを、MySQLデータテーブルのAUTO_INCREMENTカラムを取る新しいAUTO_INCREMENTように、n + 1の最大値より大きな値ときを提供。

 

MySQLのAUTO_INCREMENT属性には次の特徴があります。

  • データがUNSIGNED列として宣言されている場合AUTO_INCREMENT属性データ列は、シーケンス番号の数を2倍にすることができるように、正のシーケンス番号を持つ必要があります。例えば、データTINYINT列の最大数は、UNSIGNEDを結合場合、最大数は255になり、127であります
  • AUTO_INCREMENTのデータ列は、回避の繰り返しに固有のインデックス番号を持っている必要があります。NOT NULLは、プロパティを持っている必要があります

    練習は張InnoDBが削除され、テーブルが1になるのAUTO_INCREMENTカラムをリードするMySQLを再起動し、テーブル内のすべてのデータを見つけました。試験の複数のバリエーションケースAUTO_INCREMENTカラムを置いて、以下に報告します。

結論

1)InnoDBエンジンテーブルは、空に削除操作を行った後、テーブルのAUTO_INCREMENT値は影響を受けません。再起動MySQLデータベースと、AUTO_INCREMENT値が1となるであろう

削除操作後、AUTO_INCREMENT値テーブルは影響されないであろう2)のMyISAMエンジンのテーブルとMySQLデータベースの再起動、値は影響を受けAUTO_INCREMENTできません

あなたがのInnoDBテーブルを作成する場合3)、指​​定AUTO_INCREMENTを指定するかどうか、テーブルのAUTO_INCREMENT値が1になる原因となりますデータベースを再起動するには、Clear +を削除

4)1つのAUTO_INCREMENTにリセットされるデータベースの再起動後、またはWHERE 1を添加せずに、INNODBテーブルを削除

5)MySQLデータベースは、再起動後、INNODBテーブルAUTO_INCREMENT値は、テーブルAUTO_INCREMENT + 1の列の最大値に設定されます

理由

データベースのMySQLのAUTO_INCREMENT値をメモリに格納されているデータベースサービスでAUTO_INCREMENT InnoDBエンジンテーブルが停止し、持続的な操作を行うことはありません、MySQLデータベースは、次回再起動されます、ステートメントを実行するのと同等:

select max(id) maxId from table;
alter table auto_increment = maxId + 1;

テーブルのAUTO_INCREMENT設定値テーブル。

 

厳密には、このバグMySQLのです話します。このバグはバージョン8.0で修正されます。バージョン8.0の内容は、参照場所について:MySQLの8.0.0リリース、ハイライトは、その中にあります! そして  、それはMyISAMテーブルにさよならを言う時間のMySQL 8.0のリリースです

公開された378元の記事 ウォン称賛19 ビュー160 000 +

おすすめ

転載: blog.csdn.net/qq_32252917/article/details/104113609