MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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文では通常のカラムである costprice のみを指定します。生成カラムに値を代入することはできないためです。値を挿入すると、生成カラムの計算は自動的に行われます。

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生成カラムは特に有効です。

  1. MySQLで複数の列を持つテーブルに条件を作成する方法|IF()関数の使い方を解説

    MySQLで条件分岐を実現するIF()関数とはMySQLで条件に応じて異なる値を返したい場合は、IF()関数を使用します。IF()関数は、指定した条件が真の場合と偽の場合で、それぞれ異なる値を返すことができる便利な関数です。IF()関数の基本構文IF(yourCondition, trueStatement, falseStatement);第1引数に条件式を指定し、条件が真(true)の場合は第2引数の値を、偽(false)の場合は第3引数の値を返します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable612 (N

  2. MySQLでインデックス付きのテーブルを作成する方法を徹底解説

    MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp