はじめに
2025年現在、企業の本番環境で広く使用されているMySQL 8.0。
MySQL 8.4 がリリースされた現在でも、多くの本番環境では8.0系が稼働しており、8.0の知識は依然として重要です。
この記事では、MySQL 8.0で追加・強化された注目の機能を、公式リファレンスに基づいて紹介します。
- 特に以下の方におすすめです:
- 8.0の初歩を体系的に学びたい方
- MySQL 8.0で新たにデータベース開発を始める方
- MySQL 5.7から8.0へのアップグレードを検討している方
新機能
1. ウィンドウ関数
8.0で追加され、データ分析系業務には必須級となったウィンドウ関数(Window Functions)。
ランキング・移動平均・累積計算などがSQLだけで実装できます。
SELECT
user_id,
points,
RANK() OVER (ORDER BY points DESC) AS rank
FROM
user_points;
2. CTE(WITH句)と再帰クエリ
「WITH句」による共通テーブル式(CTE)、さらに再帰CTEがサポートされ、
ツリー構造データの展開や、複雑なサブクエリの可読性UPに役立ちます
WITH RECURSIVE org_chart AS (
SELECT id, manager_id, name FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.manager_id, e.name
FROM employees e
INNER JOIN org_chart o ON e.manager_id = o.id
)
SELECT * FROM org_chart;
3. JSONサポートの拡充
MySQL 5.7からJSON型は使えましたが、8.0ではJSON_TABLE()関数など
より高度なJSON操作が可能になりました
RDBとNoSQLの“いいとこ取り”ができます
SELECT *
FROM JSON_TABLE(
'[{"id":1,"name":"A"},{"id":2,"name":"B"}]',
'$[*]' COLUMNS(id INT PATH '$.id', name VARCHAR(100) PATH '$.name')
) AS jt;
4. デフォルト文字コードが utf8mb4 に
8.0系からutf8mb4がデフォルトになり、
4バイト文字(絵文字など)も正しく格納できるようになりました。
5. インビジブルインデックス(Invisible Indexes)
一時的にインデックスを「非活性」にできるインビジブルインデックスが追加され、
パフォーマンス検証やインデックスの段階的廃止が容易になりました
ALTER TABLE my_table ALTER INDEX idx_sample INVISIBLE;
6. セキュリティ強化とロール管理
「ロール(Roles)」によるユーザー権限の一括管理、
パスワード強度・有効期限管理の強化など、運用・セキュリティ面も進化しました。
といっても、イメージつきにくいので以下に例を挙げておきます。
ロール管理
-- 開発者用ロールを作成
CREATE ROLE 'app_developer', 'app_read_only';
-- ロールに権限を付与
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_developer';
GRANT SELECT ON myapp.* TO 'app_read_only';
-- ユーザーを作成してロールを割り当て
CREATE USER 'tsubasa'@'%' IDENTIFIED BY 'secure_password123!';
GRANT 'app_developer' TO 'tsubasa'@'%';
-- ロールを有効化
SET DEFAULT ROLE 'app_developer' TO 'tsubasa'@'%';
パスワード管理の強化例
-- パスワード強度要件を設定
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.number_count = 2;
-- パスワード有効期限を設定(90日)
CREATE USER 'temp_user'@'%'
IDENTIFIED BY 'SecurePass123!'
PASSWORD EXPIRE INTERVAL 90 DAY;
-- パスワード履歴管理(過去5回のパスワードは再利用不可)
ALTER USER 'app_user'@'%' PASSWORD HISTORY 5;
アカウントロック機能
-- 連続ログイン失敗でアカウントロック
CREATE USER 'secure_user'@'%'
IDENTIFIED BY 'SecurePass123!'
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 2; -- 2日間ロック
7. テーブルの生成・変更の即時DDL(Instant DDL)
多くのテーブル構造変更(ADD COLUMN等)がノンブロッキング(即時DDL)で行えるようになり、
大規模DBでも運用性がUPしました。
※Instant DDLは「カラム追加」など一部の操作のみノンブロッキングで、すべてのDDL操作が即時対応ではない点に注意が必要です。
おわりに
MySQL 8.0は現場で多く活用されており、新機能によって開発・運用・セキュリティ・データ分析の幅が大きく広がりました。
移行や新規設計の際は、8.0の新機能を積極的に使うことで、現代的なデータベース設計・運用が可能です。
詳細・最新情報は必ず公式リファレンスをチェックしてください。
参照