MySQL 5.7.6 以降ではGenerated Columnが使えます。 テーブル定義に計算式を記述すると計算結果をカラムとして扱えるようになる機能です。
駅メモ!でも最近利用しているGenerated Columnですが、データベース内で増えたGenerated Columnをリストアップしたくなったので方法を調べました。
GENERATION_EXPRESSION
に値があるカラムリストを得る
MySQL 5.7のリファレンスから例を流用します
CREATE TABLE triangle ( sidea DOUBLE, sideb DOUBLE, sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
information_schema.columnsのGENERATION_EXPRESSION
にGenerated Columnかどうかの情報が格納されています
MySQL :: MySQL 5.7 Reference Manual :: 24.3.5 The INFORMATION_SCHEMA COLUMNS Table
For generated columns, displays the expression used to compute column values. Empty for nongenerated columns.
Generated Columnなら値があります
SELECT table_name, column_name, generation_expression, extra FROM information_schema.columns WHERE table_schema = 'test' -- データベース名 AND generation_expression != ''
mysql> SELECT table_name, column_name, generation_expression, extra FROM information_schema.columns WHERE table_schema = 'test' AND generation_expression != ''; +------------+-------------+---------------------------------------------------+-------------------+ | table_name | column_name | generation_expression | extra | +------------+-------------+---------------------------------------------------+-------------------+ | triangle | sidec | sqrt(((`sidea` * `sidea`) + (`sideb` * `sideb`))) | VIRTUAL GENERATED | +------------+-------------+---------------------------------------------------+-------------------+ 1 row in set (0.00 sec)
Generated Columnであるtriangle.sidecのみの結果が得られました!
extraにもGenerated Columnの場合はSTORED GENERATED
またはVIRTUAL GENERATED
が入りますが、他の値も入りうるのでやはりGENERATION_EXPRESSION
を見るのが簡単でしょう