MySQLのテーブルに仮想生成列(VIRTUAL GENERATED COLUMN)を追加する方法
MySQLのテーブルに仮想生成列(VIRTUAL GENERATED COLUMN)を追加する場合は、通常の列を追加するときと同じ構文を使用し、データ型の後ろに「AS(式)」を付け加えるだけです。これにより、他の列の値をもとに自動計算される列を簡単に作成できます。
基本構文
ALTER TABLE table_name ADD COLUMN column_name AS(expression);
各項目の意味
- table_name … 仮想生成列を追加する対象のテーブル名
- column_name … 新しく追加する列の名前
- expression … 列の値を生成するために評価される式
実際の使用例
次の例では、employee_dataテーブルに対して、First_nameとLast_nameを連結して氏名を自動生成するFULLNameという仮想生成列を追加しています。CONCAT_WS()関数を使うことで、姓と名の間にスペースを挿入しながら文字列を結合できます。
mysql> ALTER TABLE employee_data ADD COLUMN FULLName VARCHAR(200) AS(CONCAT_WS(' ', First_name, Last_name));
Query OK, 0 rows affected (0.49 sec)
Records: 0 Duplicates: 0 Warnings: 0続いて、DESCRIBEコマンドでテーブル構造を確認してみましょう。
mysql> DESCRIBE employee_data; +------------+--------------+------+-----+---------+-------------------+ | 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 | VIRTUAL GENERATED | | FULLName | varchar(200) | YES | | NULL | VIRTUAL GENERATED | +------------+--------------+------+-----+---------+-------------------+ 5 rows in set (0.00 sec)
出力結果の「Extra」列にVIRTUAL GENERATEDと表示されていることから、FULLNameが仮想生成列として正しく追加されたことが確認できます。
補足:仮想生成列の特徴
- 仮想生成列は値をディスク上に物理保存せず、行が読み取られるたびに式が評価されて値が生成されます。
- 値を物理的に保存したい場合は、定義時に
STOREDキーワードを付けてストアド生成列として作成することも可能です。 - 生成列の式には、同一テーブル内の他の列や組み込み関数(今回の例では
CONCAT_WS()など)を利用できます。
-
MySQLで一時テーブルの列(カラム)を一覧表示する方法
MySQLで一時テーブル(TEMPORARY TABLE)の列を一覧表示するには、まず対象となる一時テーブルを作成しておく必要があります。ここでは例として、学生の詳細情報を格納する複数の列を持つ一時テーブルを作成してみましょう。mysql> CREATE TEMPORARY TABLE DemoTable745 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(100), StudentAge int, StudentAddress varchar(100),
-
MySQLでカラム(列)の順序を変更する方法|ALTER TABLEとAFTERの使い方
はい、MySQLではカラム(列)の順序を変更することが可能です。ALTER TABLE文とAFTERキーワードを組み合わせることで、特定のカラムを好きな位置へ移動させられます。 1. サンプルテーブルを作成する まず、動作確認用として以下のようなテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> `Student_Key_Age` int, -> `Student_Key_Name` varchar(20), -> `Student_Key_CountryName` varchar