|||||||||||||||||||||

なんぶ電子

- 更新: 

MariaDBの非表示カラム

MariaDB非表示カラム

以前、MySQLやMariaDBに全文検索設定した際に知ったのですが、MySQLやMariaDBで非表示カラム(Invisible Column)という機能が利用できるようになったようです。

全文検索用の非表示カラムは特殊なものだったのですが、ここでは通常の非表示カラムについての利用ケースや使用例を紹介したいと思います。

利用ケース

この機能は主にプログラムの互換性を保つものです。

たとえば、次のようなテーブルがあるとします。

テーブル定義

invisible_test(data_seq,value1)

このテーブルにデータを登録するプログラムコードは次のように記述されています。

プログラムコード

...
INSERT INTO invisible_test VALUES(0,1)
...

この状態でテーブル構造を変更すると、

テーブル変更

ALTER TABLE invisible_test ADD value2 INT DEFAULT 0;

当然、プログラムコードを修正しない場合は、INSERT時にエラーとなります。

Column count doesn't match value count at row

しかしINVISIBLE COLUMN(非表示カラム)を使うとコードを修正しなくても、このような修正時のエラーを回避することができます。なので、プログラム側の修正リリースを提供するまでの一時策として用います。

INVISIBLEでカラムを定義

非表示カラムは、MySQLではバージョン8.0.23から、MariaDBではバージョン10.3から利用可能です。

通常のCREATEやALTER文内で、「 INVISIBLE 」というキーワードを設定することで非表示カラムを作成できます。

非表示カラムを追加

ALTER TABLE invisible_test ADD value2 INT INVISIBLE NOT NULL DEFAULT 0;

INVISIBLEカラム設定時にNOT NULL制約を入れる場合は、デフォルト値の設定が必須です。

それぞれの公式ドキュメントのアドレスを紹介しておきます。

挙動確認

INBISIBLEカラムにすると次のプログラムコードは通過できるようになります。新しいカラムには設定したデフォルト値が入ります。

...
INSERT INTO invisible_test VALUES(0,1)
...

「 SELECT * 」文では新規追加したカラムは出力されません。しかし、明示して指定すれば結果として戻ります。

...
SELECT * FROM invisible_test;
...
| data_seq | value1 |
...
SELECT *, value2 FROM invisible_test;
| data_seq | value1 | value2 |
...

また、非表示カラムをふたつ以上持つことはできますが、その際のコーディングの選択肢としては非表示カラムをすべて対象にするかすべて対象にしないかの二択になります。

たとえば次のようなテーブル構造になっていて、value2,value3にINVISIBLEが設定してあるとします。

非表示カラムがふたつあるテーブル構造

invisible_test(data_seq,value1,value2,value3)

この時次のふたつのSQLは成立しますが、

INSESRT INTO invisible_test VALUES(0,1);
INSESRT INTO invisible_test VALUES(0,1,2,3);

次のように、非表示カラムの一部だけを設定しただけの場合はエラーとなります。

INSESRT INTO invisible_test VALUES(0,1,2);

ドライバの実装にもよるかもしれませんが、筆者の使っていたODBCドライバでは挿入対象のカラムを指定せずに、プレースホルダを利用してVALUES(?,...)とした際は非表示カラムを対象にはできませんでした。

/* これだと実行時にエラーになりました */
INSESRT INTO invisible_test VALUES(?,?,?,?);

/* こちらなら通りました */
INSESRT INTO invisible_test(data_seq,value1,value2,value3) VALUES(?,?,?,?);

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告