MySQL AUTO_INCREMENT と例
自動インクリメントとは何ですか?
自動インクリメントは、数値データ型を操作する関数です。自動インクリメントとして定義されたフィールドのテーブルにレコードが挿入されるたびに、連続した数値が自動的に生成されます。
自動インクリメントを使用する場合?
データベースの正規化に関するレッスンでは、主キーと外部キーを使用して相互に関連付けられた多くの小さなテーブルにデータを保存することにより、最小限の冗長性でデータを保存する方法を検討しました。
主キーはデータベース内の行を一意に識別するため、一意である必要があります。しかし、主キーが常に一意であることを保証するにはどうすればよいですか? 考えられる解決策の 1 つは、データを追加する前にテーブル内のキーの存在を確認する式を使用して主キーを生成することです。これはうまく機能するかもしれませんが、ご覧のとおり、この方法は複雑で確実ではありません。このような複雑さを回避し、主キーが常に一意であることを保証するために、次の式を使用できます。 MySQLの自動インクリメント機能を使用して主キーを生成します。自動インクリメントは INT データ型で使用されます。INT データ型は、符号付きと符号なしの両方の値をサポートします。符号なしデータ型には正の数のみを含めることができます。ベスト プラクティスとして、自動インクリメント主キーに符号なし制約を定義することをお勧めします。
自動インクリメント構文
次に、映画カテゴリ テーブルの作成に使用されるスクリプトを見てみましょう。
CREATE TABLE `categories` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`) );
category_id フィールドの「AUTO_INCREMENT」に注目してください。 これにより、テーブルに新しい行が挿入されるたびにカテゴリ ID が自動的に生成されます。 テーブルにデータを挿入するときは指定されません。 MySQL それを生成します。
デフォルトでは、AUTO_INCREMENT の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。
カテゴリ テーブルの現在の内容を調べてみましょう。
SELECT * FROM `categories`;
上記のスクリプトを実行すると、 MySQL myflixdb に対する workbench の結果は次のようになります。
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
ここで、カテゴリ テーブルに新しいカテゴリを挿入しましょう。
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
上記のスクリプトを myflixdb に対して実行します。 MySQL 作業台 以下に示す結果が得られます。
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
| 9 | Cartoons | NULL |
カテゴリ ID を指定していないことに注意してください。 MySQL カテゴリ ID は自動増分として定義されているため、自動的に生成されます。
によって生成された最後の挿入 ID を取得したい場合は、 MySQL、LAST_INSERT_ID 関数を使用してこれを行うことができます。以下に示すスクリプトは、生成された最後の ID を取得します。
SELECT LAST_INSERT_ID();
上記のスクリプトを実行すると、INSERT クエリによって生成された最後の自動増分番号が得られます。 結果を以下に示します。
製品概要
- 数値データ型の列に自動増分属性を指定すると、データベースに新しい行が追加されるたびに、番号が順番に生成されます。
- 自動インクリメントは主キーの生成によく使用されます。
- 自動増分で定義されたデータ型は、多くのレコードを収容できる十分な大きさである必要があります。 自動増分フィールドのデータ型として TINYINT を定義すると、テーブルに追加できるレコード数が 255 に制限されます。これを超える値は TINYINT データ型では受け入れられないためです。
- 負の数値を回避するために、自動増分主キーに unsigned 制約を指定することが推奨されます。
- テーブルから行が削除されると、その自動増分 ID は再利用されません。 MySQL 順次新しい数字を生成し続けます。
- デフォルトでは、AUTO_INCREMENT の開始値は 1 で、新しいレコードごとに 1 ずつ増加します。
- AUTO_INCREMENT シーケンスを別の値で開始するには、AUTO_INCREMENT = 10 を使用します。

