先日の記事で Amazon Aurora の MySQL 5.7 互換で全文検索を試してみたので、今回は MySQL 5.7 からの新機能である生成カラム(generated column)を試してみたいと思います。
生成カラム(generated column)とは
生成カラム(generated column)は MySQL 5.7.6 から追加された機能です。
これまで、関数で計算した結果をトリガーで特定のカラムに入れていたのを、簡単に定義することができるもので、カラム定義時に AS 計算式
と書くことにより、そのカラムの値が該当の計算結果になります。
それでは実際にやってみましょう!
環境
- Aurora 2.01
- Aurora MySQL 5.7.12
生成カラム(generated column)の使い方
まずは first_name
, last_name
カラムを持った users
テーブルを作り、そこに first_name
, last_name
を文字列結合した full_name
を生成カラムとして作ってみます。
mysql> CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, first_name VARCHAR(255), last_name VARCHAR(255), full_name VARCHAR(255) AS (CONCAT(first_name, " ", last_name)) ) ENGINE=InnoDB CHARACTER SET utf8mb4; Query OK, 0 rows affected (0.05 sec)
これで full_name
カラムに CONCAT(first_name, " ", last_name)
の結果が自動的に入るようになりました。
実際にデータをインサートして確かめてみます。
mysql> INSERT INTO users (first_name, last_name) VALUES ("Rigel", "Cherry"), ("Leandra", "Mcneil"), ("Armando", "Bond"), ("Ebony", "Sharp"), ("Iona", "Reed"), ("Nomlanga", "Carrillo"), ("Hector", "Fisher"), ("Emery", "Gross"), ("Ginger", "Cox"), ("Gage", "Finch"); Query OK, 10 rows affected (0.02 sec) Records: 10 Duplicates: 0 Warnings: 0
データを10件インサートしたので select してデータを見ます。
mysql> SELECT * FROM users; +----+------------+-----------+-------------------+ | id | first_name | last_name | full_name | +----+------------+-----------+-------------------+ | 1 | Rigel | Cherry | Rigel Cherry | | 2 | Leandra | Mcneil | Leandra Mcneil | | 3 | Armando | Bond | Armando Bond | | 4 | Ebony | Sharp | Ebony Sharp | | 5 | Iona | Reed | Iona Reed | | 6 | Nomlanga | Carrillo | Nomlanga Carrillo | | 7 | Hector | Fisher | Hector Fisher | | 8 | Emery | Gross | Emery Gross | | 9 | Ginger | Cox | Ginger Cox | | 10 | Gage | Finch | Gage Finch | +----+------------+-----------+-------------------+ 10 rows in set (0.02 sec)
full_name
カラムに問題なくデータが入っていました!
生成カラムでの検索も
mysql> SELECT * FROM users WHERE full_name LIKE "%il%"; +----+------------+-----------+-------------------+ | id | first_name | last_name | full_name | +----+------------+-----------+-------------------+ | 2 | Leandra | Mcneil | Leandra Mcneil | | 6 | Nomlanga | Carrillo | Nomlanga Carrillo | +----+------------+-----------+-------------------+ 2 rows in set (0.00 sec)
普通のカラムを扱うのと同じように検索できます。
まとめ
生成カラム(generated column)を簡単にですが、実際に作って試してみました。
色々と使い道がありそうですが、同じく MySQL 5.7 からの新機能である JSON 型と組み合わせることによっても、すごく真価を発揮するようなので、今度は JSON 型と一緒に勉強してみたいと思います。
詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド
- 作者: 奥野幹也
- 出版社/メーカー: 翔泳社
- 発売日: 2016/09/01
- メディア: Kindle版
- この商品を含むブログ (4件) を見る
データベースエンジニア教本 MySQL & PostgreSQL & NoSQL編 (Software Design別冊)
- 作者: Software Design編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2017/10/13
- メディア: 単行本
- この商品を含むブログ (1件) を見る