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

MySQLへのINSERT時にカラム(列)をスキップすることはできる?

MySQLへのINSERT時にカラムをスキップすることはできる?

結論から言うと、AUTO_INCREMENTが設定されたカラムであれば、INSERT時にそのカラムをスキップし、代わりにNULLを指定することが可能です。MySQL側で自動的に連番が採番されるためです。

1. テーブルの作成

まずは、最初のカラムにAUTO_INCREMENTを設定したサンプルテーブルを作成しましょう。

mysql> CREATE TABLE DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(100),
    StudentAge int
);
Query OK, 0 rows affected (0.60 sec)

2. レコードの挿入

続いて、INSERTコマンドでレコードを追加します。ここでは、最初のカラム(StudentId)がAUTO_INCREMENTであるため、値としてNULLを渡すことで、あたかもカラムを「スキップ」しているように扱っています。

mysql> INSERT INTO DemoTable VALUES(NULL,'Robert',21);
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO DemoTable VALUES(NULL,'Sam',22);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES(NULL,'Bob',24);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES(NULL,'Carol',20);
Query OK, 1 row affected (0.14 sec)

3. 結果の確認

SELECT文を実行して、テーブル内のすべてのレコードを表示してみます。

mysql> SELECT * FROM DemoTable;

実行結果は以下のとおりです。

+-----------+------------------+------------+
| StudentId | StudentFirstName | StudentAge |
+-----------+------------------+------------+
|         1 | Robert           |         21 |
|         2 | Sam              |         22 |
|         3 | Bob              |         24 |
|         4 | Carol            |         20 |
+-----------+------------------+------------+
4 rows in set (0.00 sec)

このように、StudentIdにはNULLを指定したにもかかわらず、1から順に自動的に連番が採番されていることが確認できます。

補足:カラム名を明示的に指定する方法もおすすめ

NULLを渡す方法以外にも、INSERT文でカラム名を明示的に指定すれば、指定しなかったカラムは自動的に処理されます。

mysql> INSERT INTO DemoTable (StudentFirstName, StudentAge) VALUES ('David', 23);

こちらの書き方は、テーブル定義のカラム順序に依存せず、意図も明確になるため、実際の開発現場では可読性・保守性の観点からより推奨されるスタイルです。状況に応じて使い分けるとよいでしょう。

  1. MySQLで複数のパラメータ値を1つの列に挿入する方法

    MySQLでは、CONCAT_WS() や CONCAT() 関数を使うことで、複数のパラメータ値を1つの列にまとめて挿入できます。ここでは、氏名・年齢・国名の3つの値を「-(ハイフン)」区切りで1つの列に格納する例を紹介します。サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable ( Name varchar(100), Age int, CountryName varchar(100), PersonInformation text ); Query OK, 0 rows affect

  2. MySQLデータベースへの挿入時にdecimal(19,2)の値が変わる?truncate()で正確な値を保存する方法

    decimal(19,2)の値が変わる原因と対処法MySQLのDECIMAL(19,2)型カラムに値を直接挿入すると、小数点以下3桁目が四捨五入され、元の値と異なる数値が保存されることがあります。正確な実数値をそのまま保存したい場合は、truncate()関数を使って小数点以下2桁で切り捨ててから挿入します。テーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table demo59-> (-> price decimal(19,2)-> );Query OK, 0 rows affected (1.12 sec)レコードの挿入次に、in