スマートスタイル TECH BLOG

データベース&クラウド技術情報

文字列型カラムのデフォルト値にCURRENT_USER関数が使えるようになりました

MySQL 8.0.34 /MySQL 8.1.0 から文字列型カラムのデフォルト値に、CURRENT_USER関数やUSER関数が利用可能になりました。

CURRENT_USER() can now be used as a default value for VARCHAR and TEXT columns in CREATE TABLE and ALTER TABLE … ADD COLUMN statements.

The functions SESSION_USER(), USER(), and SYSTEM_USER() are also supported in all of the cases just mentioned. By way of example, the following sequence of statements now works similarly to what is shown here, with the precise output dependent on your environment:

引用: Changes in MySQL 8.0.34 (2023-07-18, General Availability)

使い方

CURRENT_USER関数が返す文字列は、最大32文字のユーザー名と最大255文字のホスト名の間に区切り文字として挟まる@の1文字を足した288文字が最大長になるので、設定するカラムの文字列長は288文字以上を設定してください。

想定される利用パターンとしては、ログや監査情報としてDB接続アカウント名を残す場面でしょうか?

上記のようなテーブルを作成すると、カラム名を指定しないと見えないカラムに挿入したDBユーザーを記録できます。

サポートされるストレージエンジン

リリースノートには使えるストレージエンジンについての記述は無く、英語のドキュメントのデフォルト値についてにも記述はありませんが、MySQL 8.0.34 /MySQL 8.1.0 ではサポートされているストレージエンジンは InnoDBとMyISAMだけです。

Data Type Default Values

ソースコードを見ると、利用可能なストレージエンジンかどうかの判定をHA_SUPPORTS_DEFAULT_EXPRESSIONフラグで行っています。

引用: MySQL 8.0.34 sql/table.cc 3091行目から

下記はInnoDBの変更差分ですが、このフラグが追加されているストレージエンジンはInnoDBとMyISAMだけです。

引用: storage/innobase/handler/ha_innodb.cc

対応していないストレージエンジン(MEMORYやARCHIVE)でテーブルを作成しようとすると、エラーメッセージが表示されます。

まとめ

Innovation Release のMySQL 8.1がリリースされて、MySQL 8.0系には機能追加はなくなりバグ修正を中心になると思われます。

今後は様々な機能が積極的にInnovation Releaseの8.x系に追加されると思われるので、今後もこのBlogで新機能の紹介をしていけたらと思います。

Return Top