MySQLのSTORED生成カラム(GENERATED COLUMN)とは?数式との連携を実例で解説
MySQLでは、同じテーブル内の他のカラムの値をもとに自動計算される「生成カラム(Generated Column)」を定義できます。生成カラムには大きく分けて2種類あり、読み取り時に都度計算される「VIRTUAL(仮想)」タイプと、計算結果を物理的にテーブル内へ書き込む「STORED(保存)」タイプがあります。
本記事では、キーワード「STORED」を使って保存生成カラムを作成し、数式(式)とどのように連携して動作するのかを、具体的な例とともに解説します。
保存生成カラムを持つテーブルの作成例
ここでは、「triangle_stored」というテーブルを作成します。SideAとSideBという2つのDOUBLE型カラムに加え、SideCを式から自動計算される保存生成カラムとして定義します。
mysql> Create table triangle_stored(SideA DOUBLE, SideB DOUBLE, SideC DOUBLE AS (SQRT(SideA * SideB + SideB * SideB)) STORED); Query OK, 0 rows affected (0.47 sec)
ポイントは AS (式) STORED の部分です。この記述により、SideCは通常のカラムではなく、括弧内の式の計算結果が物理的に保存される生成カラムになります。
DESCRIBEで定義を確認する
mysql> Describe triangle_stored; +-------+--------+------+-----+---------+------------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+------------------+ | SideA | double | YES | | NULL | | | SideB | double | YES | | NULL | | | SideC | double | YES | | NULL | STORED GENERATED | +-------+--------+------+-----+---------+------------------+ 3 rows in set (0.00 sec)
Extra列に「STORED GENERATED」と表示されており、SideCが保存生成カラムとして正しく登録されていることが確認できます。
データを挿入すると自動計算される
mysql> INSERT INTO triangle_stored(SideA, SideB) Values(1,1),(3,4),(6,8); Query OK, 3 rows affected (0.09 sec) Records: 3 Duplicates: 0 Warnings: 0
注目すべきは、INSERT文で指定しているのはSideAとSideBだけだという点です。生成カラムには直接値を渡すことはできず、行が挿入(または更新)されたタイミングで式が自動的に評価され、その結果が物理的に書き込まれます。
SELECTで結果を確認する
mysql> Select * from triangle_stored; +-------+-------+--------------------+ | SideA | SideB | SideC | +-------+-------+--------------------+ | 1 | 1 | 1.4142135623730951 | | 3 | 4 | 5.291502622129181 | | 6 | 8 | 10.583005244258363 | +-------+-------+--------------------+ 3 rows in set (0.00 sec)
SideAとSideBの値から、SideCが式に従って自動的に計算され、値が格納されているのがわかります。
まとめ:STORED生成カラムのメリット
保存生成カラムを活用すると、計算ロジックをテーブル定義側に組み込めるため、アプリケーション側で毎回計算や代入を行う必要がなくなり、データの一貫性も保ちやすくなります。さらに、STOREDタイプは値の実体を持つためインデックスを作成することが可能で、集計や検索のパフォーマンス向上にも役立ちます。
-
MySQLのストアドGENERATED COLUMNSと仮想GENERATED COLUMNSの違いとは?徹底解説
MySQLには、他のカラムの値から自動的に計算される「生成カラム(GENERATED COLUMNS)」という機能があります。生成カラムには「ストアド(Stored)」と「仮想(Virtual)」の2種類が存在し、それぞれ特性が大きく異なります。ここでは、両者の主な違いをわかりやすく解説します。ディスク容量の違い仮想生成カラムは、値をテーブルに物理的に保存しないため、ディスク容量を一切消費しません。一方、ストアド生成カラムは計算結果を実際にテーブル内に格納するため、ディスク容量を消費します。ストレージ容量を重視する場合は、仮想生成カラムが有利です。操作(DDL実行)の違いカラムの追加・変更とい
-
MySQLの保存型生成カラム(STORED GENERATED COLUMN)と組み込み関数の連携方法を実例で解説
MySQLの生成カラム(GENERATED COLUMN)は、CONCAT()などの組み込み関数と組み合わせて利用できます。ここでは、テーブル「employee_data_stored」に保存型(STORED)の生成カラムを作成する例を使って、その仕組みを解説します。 保存型の生成カラムとは、式による計算結果がディスク上に物理的に保存されるカラムのことです。カラム定義にSTOREDキーワードを指定することで作成できます。以下の例では、姓(First_name)と名(Last_name)をつなげた氏名(FULL_NAME)を自動的に生成しています。 例:STORED型生成カラムを持つテーブルを作