SQL言語の基本概念
SQL(Structured Query Language)は、リレーショナルデータベースにおいてデータ操作・検索・メンテナンスを行うための標準化された言語です。開発者やDB管理者は以下の作業に利用できます:
- データベース構造の変更
- セキュリティ設定の調整
- ユーザー権限の付与
- 必要な情報の取得
- データの更新・バックアップ・復元
SQL文の分類
MySQLではSQL文を以下の4つのカテゴリに分類します:
- DDL(データ定義言語): データベースオブジェクト(データベース・テーブル・カラム・インデックス)の定義操作
主要キーワード: CREATE, DROP, ALTER, RENAME - DML(データ操作言語): レコード操作
主要キーワード: INSERT, DELETE, UPDATE - DCL(データ制御言語): アクセス権限とセキュリティレベルの設定
主要キーワード: GRANT, REVOKE - DQL(データ検索言語): データ検索
主要キーワード: SELECT
SQL文の記述規則
- SQLキーワードは大文字小文字を区別しない
- 文字列定数は大文字小文字を区別する
- 単一行または複数行での記述が可能だが、セミコロンで終了必須
- キーワードは行をまたがない
- 可読性向上のためのインデントやスペース使用が推奨される
データベース操作の基本
データベース一覧表示
SHOW DATABASES [LIKE pattern];
このコマンドにより、MySQLサーバ上のすべてのデータベースを確認できます。システムデータベースには以下が含まれます:
- information_schema: データベースオブジェクト情報の格納
- performance_schema: パフォーマンスパラメータの格納
- mysql: ユーザー権限情報の格納
- sys: MySQL 5.7以降で追加されたビューベースの統計情報
新規データベース作成
CREATE DATABASE IF NOT EXISTS database_name;
データベースはテーブル、ビュー、関数、クエリ、バックアップから構成され、その中でもテーブルが最も重要な要素となります。
データベース切替と情報確認
-- データベース切替
USE database_name;
-- 現在のデータベース確認
SELECT DATABASE();
-- MySQLバージョン確認
SELECT VERSION();
-- 現在のユーザー確認
SELECT USER();
-- ユーザー詳細情報確認
SELECT User, Host FROM mysql.user;
データベース削除
DROP DATABASE [IF EXISTS] database_name;
この操作により、データベース内のすべての構造とデータが完全に削除されます。
MySQLの文字セット
主要文字セット
MySQLの文字セットはCHARACTERとCOLLATIONから構成されます:
- latin1: 西ヨーロッパ言語、ギリシャ語対応
- gbk: 簡体字中国語対応
- big5: 繁体字中国語対応
- utf8: 世界中のほとんどの言語に対応
- utf8mb4: 完全なUTF-8実装
-- 文字セット設定確認
SHOW VARIABLES LIKE 'character%';
utf8とutf8mb4の違い
utf8mb4はMySQL 5.5.3以降で導入され、"most bytes 4"を意味します。MySQLのutf8は最大3バイトまでしか対応していないため、絵文字や特殊漢字などの4バイト文字を扱えません。MySQL 8.0以降ではutf8mb4の使用が推奨されています。
データベース設計と正規化
設計プロセス
適切なデータベース設計は以下の利点を提供します:
- ストレージ空間の効率化
- データ整合性の確保
- アプリケーション開発の容易化
設計手順:
- 要件分析フェーズ
- 概念設計フェーズ(ER図作成)
- 論理設計フェーズ(正規化適用)
- 物理設計フェーズ
- 実装フェーズ
- テストフェーズ
- 保守フェーズ
ER図の作成方法
ER図の基本要素:
- 長方形: エンティティ(名詞)
- 楕円形: 属性
- 菱形: 関係(動詞)
ホテル管理システムの例では、「顧客」と「客室」をエンティティとして識別し、それぞれの属性と関係を定義します。
正規化の三原則
- 第一正規形: 各カラムが原子値を持つこと
- 第二正規形: 主キーに完全依存すること(部分依存の排除)
- 第三正規形: 主キー以外のカラム間の推移的依存を排除すること