CREATE TABLEステートメントでMySQLテーブルに複数のSTORED生成カラム(GENERATED COLUMNS)を定義する方法
MySQLでは、1つのテーブルに複数のSTORED生成カラムを追加することが可能です。CREATE TABLEステートメントのカラム定義内で、AS (式) STOREDという構文を必要な数だけ記述するだけで実現できます。
基本構文
CREATE TABLE テーブル名 (
カラム名 データ型,
生成カラム名 データ型 AS (式) STORED,
生成カラム名2 データ型 AS (式2) STORED
);具体例:2つのSTORED生成カラムを持つテーブルを作成する
次の例では、「原価(cost)」と「価格(price)」をもとに利益を自動計算する profit カラムと、価格から2を差し引いた値を自動計算する price_revised カラムという、2つのSTORED生成カラムを持つテーブルを作成します。
mysql> Create table profit1(cost int, price int, profit int AS (price-cost) STORED, price_revised int AS (price-2) STORED); Query OK, 0 rows affected (0.36 sec)
テーブル構造の確認(DESCRIBE)
mysql> Describe profit1; +---------------+---------+------+-----+---------+------------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------+------+-----+---------+------------------+ | cost | int(11) | YES | | NULL | | | price | int(11) | YES | | NULL | | | profit | int(11) | YES | | NULL | STORED GENERATED | | price_revised | int(11) | YES | | NULL | STORED GENERATED | +---------------+---------+------+-----+---------+------------------+ 4 rows in set (0.00 sec)
Extra 列に「STORED GENERATED」と表示されていることから、2つのカラムがどちらもSTORED生成カラムとして正しく定義されていることが確認できます。
データの挿入と検索結果
INSERT文では通常のカラムである cost と price のみを指定します。生成カラムに値を代入することはできないためです。値を挿入すると、生成カラムの計算は自動的に行われます。
mysql> Insert into profit1(Cost, Price) values(100,110); Query OK, 1 row affected (0.09 sec) mysql> Insert into profit1(Cost, Price) values(200,220); Query OK, 1 row affected (0.09 sec) mysql> Select * from profit1; +------+-------+--------+---------------+ | cost | price | profit | price_revised | +------+-------+--------+---------------+ | 100 | 110 | 10 | 108 | | 200 | 220 | 20 | 218 | +------+-------+--------+---------------+ 2 rows in set (0.00 sec)
実行結果のポイント
- profit:各行で
price - costが自動計算され、110-100=10、220-200=20 という値が格納されています。 - price_revised:各行で
price - 2が自動計算され、108、218 という値が格納されています。
補足:STORED生成カラムのメリット
生成カラムには「VIRTUAL(仮想)」と「STORED(保存)」の2種類があります。STOREDを指定すると、計算結果が実際にディスク上に保存されるため、参照時の読み取り速度が速くなるというメリットがあります。その一方で、ストレージ容量を消費し、挿入・更新時に計算コストが発生する点には注意が必要です。頻繁に参照される計算結果を扱う場合に、STORED生成カラムは特に有効です。
-
MySQLで複数の列を持つテーブルに条件を作成する方法|IF()関数の使い方を解説
MySQLで条件分岐を実現するIF()関数とはMySQLで条件に応じて異なる値を返したい場合は、IF()関数を使用します。IF()関数は、指定した条件が真の場合と偽の場合で、それぞれ異なる値を返すことができる便利な関数です。IF()関数の基本構文IF(yourCondition, trueStatement, falseStatement);第1引数に条件式を指定し、条件が真(true)の場合は第2引数の値を、偽(false)の場合は第3引数の値を返します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable612 (N
-
MySQLでインデックス付きのテーブルを作成する方法を徹底解説
MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp