MySQLのデータベース操作と設計入門

データベースの基本概念

データベース(DB)とは、構造化された形式で情報を保存するためのシステムです。データは特定の規則に従って整理・保管され、効率的なアクセスが可能になります。

データベース管理システム(DBMS)は、これらのデータを管理するソフトウェアであり、代表的なものには MySQL や Oracle などがあります。

SQL(Structured Query Language)は、リレーショナルデータベースを操作するための標準的な言語です。

リレーショナルモデルの特徴

RDBMS(リレーショナルデータベース管理システム)では、情報は複数のテーブルによって表現されます。各テーブルは行と列から構成されており、関連するデータ同士がリンクされています。

  • 一貫したテーブル形式により、保守性が向上します。
  • SQLを使用することで、統一された方法でデータ操作が可能です。

SQL文の基本構文と種別

SQLステートメントは以下のように記述できます:

  • 1行または複数行で記述でき、セミコロンで終了します。
  • インデントや空白は任意ですが、可読性を高めるために推奨されます。
  • MySQLでは大文字小文字を区別しませんが、キーワードは大文字で書くことが一般的です。

コメントの書き方:

  • 単一行コメント: -- コメント内容 または # コメント内容(MySQL限定)
  • 複数行コメント: /* コメント内容 */

SQLは以下の4つのカテゴリに分類されます:

  • DDL(Data Definition Language): データベースやテーブルなどのオブジェクトを作成・変更・削除します。
  • DML(Data Manipulation Language): データの挿入・更新・削除を行います。
  • DQL(Data Query Language): データの検索を行います。
  • DCL(Data Control Language): アクセス権限やユーザー管理に関係します。

DDLによるスキーマ定義

データベースの確認と選択:

SHOW DATABASES;
SELECT DATABASE();
USE database_name;

データベースの作成と削除:

CREATE DATABASE IF NOT EXISTS db_name 
[DEFAULT CHARACTER SET charset_name] 
[COLLATE collation_name];

DROP DATABASE IF EXISTS db_name;

テーブルの確認と詳細表示:

SHOW TABLES;
DESCRIBE table_name;
SHOW CREATE TABLE table_name;

テーブルの作成例:

CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '識別子',
  name VARCHAR(50) NOT NULL COMMENT '氏名',
  email VARCHAR(100) UNIQUE COMMENT 'メールアドレス'
) COMMENT='ユーザー情報';

主なデータ型:

  • 整数型: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
  • 浮動小数点型: FLOAT, DOUBLE, DECIMAL(M,D)
  • 文字列型: CHAR(n), VARCHAR(n), TEXT
  • 日付時間型: DATE, TIME, DATETIME, TIMESTAMP, YEAR

テーブル構造の変更:

-- 新しいカラム追加
ALTER TABLE table_name ADD COLUMN new_col VARCHAR(255);

-- カラムの型変更
ALTER TABLE table_name MODIFY old_col TEXT;

-- カラム名の変更
ALTER TABLE table_name CHANGE old_name new_name VARCHAR(100);

-- カラムの削除
ALTER TABLE table_name DROP COLUMN col_name;

-- テーブル名の変更
ALTER TABLE old_table_name RENAME TO new_table_name;

-- テーブルの削除
DROP TABLE IF EXISTS table_name;
TRUNCATE TABLE table_name;

DMLによるデータ操作

レコードの挿入:

INSERT INTO table_name (col1, col2) VALUES ('val1', 'val2');
INSERT INTO table_name VALUES ('val1', 'val2');

レコードの更新:

UPDATE table_name SET col1 = 'new_val' WHERE condition;

レコードの削除:

DELETE FROM table_name WHERE condition;

DQLによるデータ取得

基本的なSELECT文:

SELECT col1, col2 FROM table_name;
SELECT * FROM table_name;

-- 別名設定
SELECT col1 AS alias1, col2 AS alias2 FROM table_name;

-- 重複除去
SELECT DISTINCT col_list FROM table_name;

条件付き検索:

SELECT col_list FROM table_name WHERE conditions;

集計関数の利用:

SELECT COUNT(*) FROM table_name;
SELECT MAX(col) FROM table_name;
SELECT MIN(col) FROM table_name;
SELECT AVG(col) FROM table_name;
SELECT SUM(col) FROM table_name;

※NULL値は集計対象外となります。

グループ化とフィルタリング:

SELECT col_list FROM table_name
WHERE condition
GROUP BY group_column
HAVING having_condition;
  • WHERE句はグループ化前にフィルタリングし、HAVING句はグループ化後に適用されます。
  • HAVING句では集計関数を使用できますが、WHERE句ではできません。

並び替え:

SELECT col_list FROM table_name
ORDER BY col1 ASC, col2 DESC;

ページング処理:

SELECT col_list FROM table_name LIMIT offset, count;
-- 例: 2ページ目(10件ずつ)
SELECT * FROM table_name LIMIT 10, 10;

※MySQLではLIMIT句がページングに使用されます。

クエリ実行順序:

  1. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

DCLによるアクセス制御

ユーザーの一覧と管理:

USE mysql;
SELECT User, Host FROM user;

-- ユーザー作成
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

-- パスワード変更
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'new_password';

-- ユーザー削除
DROP USER 'username'@'host';

権限の付与と剥奪:

SHOW GRANTS FOR 'username'@'host';

-- 権限付与
GRANT privileges ON database.table TO 'username'@'host';

-- 権限剥奪
REVOKE privileges ON database.table FROM 'username'@'host';

主要な権限:

  • ALL: 全ての権限
  • SELECT: 読み取り
  • INSERT: 追加
  • UPDATE: 更新
  • DELETE: 削除
  • ALTER: スキーマ変更
  • DROP: テーブルやデータベースの削除
  • CREATE: 新規作成

タグ: MySQL database SQL DDL DML

8月19日 11:36 投稿