MySQLの保存型生成カラム(STORED GENERATED COLUMN)と組み込み関数の連携方法を実例で解説
MySQLの生成カラム(GENERATED COLUMN)は、CONCAT()などの組み込み関数と組み合わせて利用できます。ここでは、テーブル「employee_data_stored」に保存型(STORED)の生成カラムを作成する例を使って、その仕組みを解説します。
保存型の生成カラムとは、式による計算結果がディスク上に物理的に保存されるカラムのことです。カラム定義にSTOREDキーワードを指定することで作成できます。以下の例では、姓(First_name)と名(Last_name)をつなげた氏名(FULL_NAME)を自動的に生成しています。
例:STORED型生成カラムを持つテーブルを作成する
mysql> Create table employee_data_stored(ID INT AUTO_INCREMENT PRIMARY KEY, First_name VARCHAR(50) NOT NULL, Last_name VARCHAR(50) NOT NULL, FULL_NAME VARCHAR(90) GENERATED ALWAYS AS(CONCAT(First_name,' ',Last_name)) STORED);
Query OK, 0 rows affected (0.52 sec)
mysql> DESCRIBE employee_data_stored;
+------------+-------------+------+-----+---------+------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+------------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| First_name | varchar(50) | NO | | NULL | |
| Last_name | varchar(50) | NO | | NULL | |
| FULL_NAME | varchar(90) | YES | | NULL | STORED GENERATED |
+------------+-------------+------+-----+---------+------------------+
4 rows in set (0.00 sec)
mysql> INSERT INTO employee_data_stored(first_name, Last_name) values('Gaurav','Kumar');
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO employee_data_stored(first_name, Last_name) values('Raman','Singh');
Query OK, 1 row affected (0.09 sec)
mysql> Select * from employee_data_stored;
+----+------------+-----------+--------------+
| ID | First_name | Last_name | FULL_NAME |
+----+------------+-----------+--------------+
| 1 | Gaurav | Kumar | Gaurav Kumar |
| 2 | Raman | Singh | Raman Singh |
+----+------------+-----------+--------------+
2 rows in set (0.00 sec)
DESCRIBEコマンドでテーブル構造を確認すると、FULL_NAMEカラムのExtra列に「STORED GENERATED」と表示されており、このカラムが保存型の生成カラムであることがわかります。
続くINSERT文では、First_nameとLast_nameの2つの値しか指定していません。それにもかかわらず、SELECT文で全データを取得すると、「Gaurav Kumar」「Raman Singh」のように氏名が結合された値がFULL_NAMEに格納されているのが確認できます。これは、行の挿入時にCONCAT()関数が自動的に評価され、その結果がテーブルに保存されたためです。
ポイントまとめ
- 生成カラムの定義式には、
CONCAT()をはじめとする組み込み関数を使用できる。 STOREDキーワードを指定すると、計算結果が物理的にテーブルへ保存される。- 値はINSERT・UPDATEのタイミングで計算され書き込まれるため、読み取り時の処理が高速になるというメリットがある。
-
MySQLテーブルのカラム名を取得する方法【SHOW・DESCRIBE活用ガイド】
SHOWコマンドでカラム名を取得するMySQLでは、SHOWコマンドを使うことで、テーブルのカラム(列)名を簡単に確認できます。カラム名だけでなく、データ型やNULL許可、キー情報なども一緒に取得できるのが特徴です。基本構文show columns from テーブル名;サンプルテーブルの作成まず、動作確認用に「DemoTable」というテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName varchar(
-
MySQLで複数のカラムにNULL値を含むレコードを検索する方法
はじめにMySQLで複数のカラムの中にNULL値が1つでも含まれているレコードを抽出したい場合、GREATEST()関数を活用するのが効果的です。GREATEST()は引数の中から最大値を返す関数ですが、引数のいずれかにNULLが含まれている場合、結果もNULLを返すという特性があります。この特性を利用すれば、複数カラムにわたるNULL値のチェックをシンプルな条件式で実現できます。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、NULL値を含むレコードを検索する手順を順番に解説します。テーブルの作成まず、4つのINT型カラムを持つテーブルを作成しましょう。mysql> c