MySQLのAUTO_INCREMENT列にNULL・0・空の値を挿入すると連番は自動的に採番されるのか?
MySQLでは、テーブルのAUTO_INCREMENT列に対してNULL、0(ゼロ)、あるいは値なし(空文字列)を挿入した場合でも、その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が自動的に一意な連番を割り当ててくれるため、主キーの管理を意識せずにデータを追加できます。
-
MySQLで最初の3件のレコードに特定の値を設定する方法
MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_I
-
MySQLで列の最大値を取得する方法をわかりやすく解説
MySQLで特定の列の最大値を取得するには、MAX(columnName)関数を使用します。本記事では、その基本的な使い方に加えて、データベースやテーブルの設計に関する前提知識もあわせて解説します。MySQLのデータベースとテーブルの基礎MySQLをインストールする前に、まず使用するバージョンと配布形式(バイナリファイルか、ソースファイルからビルドするか)を決定することが重要です。新しく作成したばかりのデータベースには、当然ながらテーブルはまだ存在しません。データベース設計において最も重要なのは、以下の要素を決めることです。データベース全体の構造必要となるテーブルの一覧各テーブルに含まれる列(