MySQLのテーブルにストアドGENERATEDカラム(生成カラム)を追加する方法
MySQLのテーブルにストアド生成カラム(STORED GENERATED COLUMN)を追加する場合、通常のカラム追加と同じALTER TABLE構文を使用し、データ型の後に「AS(式)」とSTOREDキーワードを指定するだけで実現できます。
生成カラムとは、他のカラムの値から式を用いて自動的に計算されるカラムのことです。STOREDを指定すると、計算結果が物理的にディスクへ保存されるため、参照時のパフォーマンスが向上します(VIRTUALの場合は読み取り時に毎回計算されます)。
基本構文
ALTER TABLE table_name ADD COLUMN column_name AS(expression) STORED;
使用例
以下の例では、employee_data_storedテーブルに対して、First_nameとLast_nameを連結した氏名を格納するFULLNameというストアド生成カラムを追加しています。
mysql> ALTER TABLE employee_data_stored ADD COLUMN FULLName Varchar(200) AS (CONCAT_WS(" ", 'First_name','Last_name')) STORED;
Query OK, 2 rows affected (1.23 sec)
Records: 2 Duplicates: 0 Warnings: 0カラムが正しく追加されたかどうかは、DESCRIBE文で確認できます。
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 | | FULLName | varchar(200) | YES | | NULL | STORED GENERATED | +------------+--------------+------+-----+---------+------------------+ 5 rows in set (0.00 sec)
ポイント解説
- Extra列の確認:
DESCRIBEの実行結果で「Extra」列にSTORED GENERATEDと表示されていれば、そのカラムがストアド生成カラムとして登録されていることを意味します。 - 式の指定: 例では
CONCAT_WS()関数を使って姓名をスペース区切りで連結しています。生成カラムの式には、同じテーブル内の既存カラムを参照する決定的な(deterministicな)式を指定できます。 - 注意点: 生成カラムの式の中で、他の生成カラムを参照することも可能ですが、サブクエリやストアドファンクションなど非決定的な要素は使用できません。
このように、ALTER TABLE ... ADD COLUMN ... AS(式) STOREDを使えば、既存テーブルを簡単に変更してストアド生成カラムを追加できます。
-
MySQLでNULLが並ぶテーブル列に小計(累計)を追加する方法
はじめにMySQLでは、ユーザー定義変数を活用することで、NULLが並んでいる列に対して小計(累積値)を簡単に追加できます。この記事では、実際のサンプルコードを使いながら、その手順をわかりやすく解説します。1. テーブルの作成まず、以下のようにテーブルを作成しましょう。mysql> create table DemoTable-> (-> Amount int,-> SubTotal int-> );Query OK, 0 rows affected (0.65 sec)2. レコードの挿入次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは
-
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),