MariaDB では explicit_defaults_for_timestamp が未設定の場合、テーブル内で最初のTIMESTAMP 型カラムに NULL 属性・DEFAULT 句・ON UPDATE 句のいずれも指定していないと、DEFAULT current_timestamp() と ON UPDATE current_timestamp() が暗黙に付与されます。
検証環境 mariadb10.6とmariadb10.10
Docker で MariaDB 10.6 と 10.10 のコンテナを構築しました。
services:
mariadb-10.6:
image: mariadb:10.6
ports:
- "3306:3306"
mariadb-10.10:
image: mariadb:10.10
ports:
- "3307:3306"
実行したSQL
両バージョンで同じテーブルを作成しました。token_expires カラムには NULL 属性・DEFAULT 句・ON UPDATE 句のいずれも指定していません。
CREATE TABLE timestamp_auto_default_test (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
token_expires TIMESTAMP NOT NULL
);
SHOW CREATE TABLE timestamp_auto_default_test;
検証結果
MariaDB 10.6 では、token_expires カラムに DEFAULT current_timestamp() と ON UPDATE current_timestamp() が付与されました。
`token_expires` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
MariaDB 10.10 では、同じ DDL でも付与されませんでした。
`token_expires` timestamp NOT NULL
まとめ
暗黙付与の挙動差を確認できました。
原因は、10.10 でこの機能自体が撤廃されたことではありません。explicit_defaults_for_timestampの値を確認したところ、明示的に設定していないにもかかわらず 10.6 では 0、10.10 では 1 でした。
このシステム変数のデフォルト値が 10.10 で変更されたことが、暗黙付与の有無を分けています。