スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信

MariaDB Server 10.4 : 動的スキーマ変更

本記事は MariaDB Corporation より寄稿された記事となります

はじめに

2018年5月に GA となった MariaDB Server 10.3 では Instant ADD Column (既存テーブルの最後列に動的にカラムを追加する機能)が実装されましたが,2019年6月に GA となった MariaDB Server 10.4 ではさらに多くのスキーマ変更(Instant DDL)が可能となりました。本記事ではこれらの動的スキーマ変更機能に関して解説いたします。

インスタントDDL

MariaDB Server 10.4 では InnoDB ストレージエンジンを用いる場合,以下のようなスキーマの動的変更が可能となりました。

  • 列の追加 (10.3以降)
  • 列の削除
  • 列の順序変更
  • データ型変更
  • NULLの使用を許可
  • デフォルト値設定と削除
  • 制約の削除

各機能に関して,以下に例を示します。

ALTER TABLE … ADD COLUMN : 列の追加

まず最初に以下のような a, b 列からなる t1 テーブルを作成します。

ここで,alter_algorithm に INSTANT を指定し,列(カラム)を追加します。

DESC 文でテーブル定義を確認してみます。

正常に c 列が追加されていることが確認できました。ここまでは MariaDB Server 10.3 でも可能でしたが,10.4 では最後列だけでなく,任意の位置に追加することができます。

DESC 文でテーブル定義を確認します。

意図したとおり,a 列の直後に c 列が追加されていることが確認できました。

ALTER TABLE … DROP COLUMN : 列の削除

DESC 文で確認しますと,c 列が削除されていることが確認できます。

ALTER TABLE … MODIFY COLUMN : 列の変更

MODIFY COLUMN では,列の順番の変更や,型(type)の変更が可能となっています。まず,順番の変更を行ってみます。

列の順番変更

c 列がテーブル作成時に指定した最後列ではなく,a 列の後に位置が変更されています。

列のデータ型変更

現時点では,列のデータ型(type)変更には多くの制限があります。詳細は以下の公式ドキュメントを参照願います。

InnoDB Online DDL Operations

例えば以下のように,c 列を varchar から int に変更しようとしますと,

以下のエラーとなります。

可能な操作としては,varchar 型においてサイズを大きくすることが可能です。

DESC 文で確認しますと意図通りに c 列が varchar(100) となっています。

NULLを許可

DESC 文で確認しますと,c 列は Null=No となっています。

ここで,MODIFY COLUMN で NULL を許可してみます。

DESC 文で確認しますと,c 列は Null=YES となっており,即時変更されたことが確認できます。

ただし,NULL から NOT NULL への変更はできませんので,留意願います。

ALTER TABLE … ALTER COLUMN

デフォルト値の変更

各カラムのデフォルト値は NULLとなっています。

ここで,以下の ALTER COLUMN を実行し,c 列のデフォルト文字列を指定します。

以下のようにデフォルト文字列が設定されました。

まとめ

MariaDB Server 10.4 で追加された動的スキーマ変更機能(Instant DDL)について解説させて頂きました。従来はデータベースを停止しないと行えなかったようなテーブルの変更操作がオンラインで行えるようになり,DBA(データベース管理者)の方々にとっては有益な新機能と言えるかと存じます。

InnoDB Online DDL Operations 公式ドキュメント


執筆者情報

後藤 智(GOTO Satoru)
2017年6月よりMariaDB CorporationにてAPAC(Asia Pacific)地域におけるプリセールス業務を主に担当。現在は主に日本を担当。
この執筆者の他の記事をよむ
Return Top