MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのAUTO_INCREMENT列にNULL・0・空の値を挿入すると連番は自動的に採番されるのか?

MySQLでは、テーブルのAUTO_INCREMENT列に対してNULL0(ゼロ)、あるいは値なし(空文字列)を挿入した場合でも、そのAUTO_INCREMENT列には自動的に連番(シーケンス番号)が割り当てられます。

これは、AUTO_INCREMENT属性が付与された列に「実質的な値が指定されていない」と判断されるデータが挿入されると、MySQLが内部で次のシーケンス番号を生成して代入する仕組みになっているためです。以下、実際の例で動作を確認してみましょう。

検証用テーブルの作成

まず、「id」列と「Name」列を持つテーブル「test123」を作成します。「id」列にはPRIMARY KEY制約とともにAUTO_INCREMENTを指定しています。

mysql> create table test123(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(10));
Query OK, 0 rows affected (0.15 sec)

NULL・0・空文字列の挿入

次に、「Name」列に対して空文字列('')、'0'、NULLという3つの異なる値を1回のINSERT文で挿入します。このとき「id」列には何も指定していません。

mysql> Insert Into test123(Name) values(''),('0'),(NULL);
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0

結果の確認

SELECT文でテーブルの中身を確認すると、以下のようになります。

mysql> Select * from test123;
+----+------+
| id | Name |
+----+------+
| 1  |      |
| 2  |    0 |
| 3  | NULL |
+----+------+
3 rows in set (0.00 sec)

結果の解説

この結果から分かるように、「Name」列に挿入した値に関わらず、「id」列には1、2、3という連番が自動的に採番されています。

  • 1行目:Nameに空文字列('')を挿入 → id = 1 が自動採番
  • 2行目:Nameに '0' を挿入 → id = 2 が自動採番
  • 3行目:Nameに NULL を挿入 → id = 3 が自動採番

なお、ここでのポイントは、NULLや0がAUTO_INCREMENT列である「id」ではなく、「Name」列に挿入されている点です。もしAUTO_INCREMENT列自体に明示的に具体的な数値を挿入した場合は、その値がそのまま使用され、以降の連番はその値の続きから採番されます。

このように、AUTO_INCREMENT列を含むテーブルへのINSERT時には、その列を省略するか、NULLを指定すれば、MySQLが自動的に一意な連番を割り当ててくれるため、主キーの管理を意識せずにデータを追加できます。

  1. MySQLで最初の3件のレコードに特定の値を設定する方法

    MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968     (     Id int NOT NULL AUTO_I

  2. MySQLで列の最大値を取得する方法をわかりやすく解説

    MySQLで特定の列の最大値を取得するには、MAX(columnName)関数を使用します。本記事では、その基本的な使い方に加えて、データベースやテーブルの設計に関する前提知識もあわせて解説します。MySQLのデータベースとテーブルの基礎MySQLをインストールする前に、まず使用するバージョンと配布形式(バイナリファイルか、ソースファイルからビルドするか)を決定することが重要です。新しく作成したばかりのデータベースには、当然ながらテーブルはまだ存在しません。データベース設計において最も重要なのは、以下の要素を決めることです。データベース全体の構造必要となるテーブルの一覧各テーブルに含まれる列(