MySQL 基本構文ガイド
MySQL データベース
MySQLデータベースに接続するには、以下のコマンドを使用します:
mysql -u root -p
リレーショナルデータベース
概念:リレーショナルモデルに基づき、複数の相互接続された2次元テーブルで構成されるデータベースです。
特徴:
- 表形式でデータを保存し、形式が統一されているためメンテナンスが容易です。
- SQL言語を使用して操作でき、標準化されており使いやすいです。
SQL構文
一般的な構文規則:
- SQL文は単一行または複数行で記述でき、セミコロンで終わります。
- SQL文にはスペースやインデントを使用して可読性を向上させることができます。
- MySQLのSQL文は大文字と小文字を区別しません。キーワードは大文字を使用することをお勧めします。
- コメント:
- 単行コメント:-- コメント内容 または # コメント内容(MySQL特有)
- 複数行コメント:/* コメント内容 */
SQLの種類:
DDL (Data Definition Language)
データベース操作
-- すべてのデータベースを表示 SHOW DATABASES; -- 現在のデータベースを表示 SELECT DATABASE(); -- データベースの作成 CREATE DATABASE [IF NOT EXISTS] データベース名 [DEFAULT CHARACTERSET 文字セット] [COLLATE 照合規則]; -- 文字セットはutf8mb4が推奨されます -- データベースの削除 DROP DATABASE [IF EXISTS] データベース名; -- データベースの使用 USE データベース名;
テーブル操作 - クエリ
-- 現在のデータベース内のすべてのテーブルを表示 SHOW TABLES; -- テーブル構造を表示 DESC テーブル名; -- 指定したテーブルの作成文を表示 SHOW CREATE TABLE テーブル名;
テーブル操作 - 作成
CREATE TABLE テーブル名 (
フィールド1 フィールド1の型[COMMENT フィールド1のコメント],
フィールド2 フィールド2の型[COMMENT フィールド2のコメント]
)[COMMENT テーブルのコメント];
データ型
- 数値型:
- TINYINT UNSIGNED:符号なし型
- TINYINT SIGNED:符号あり型
- 文字列型:
- CHAR(x)とVARCHAR(x)は両方ともパラメータが必要で、保存する文字数を指定します。
- CHAR():性能が良い、固定長文字列に適しています(例:性別 char(1))
- VARCHAR():性能が若干劣る、可変長文字列に適しています(例:名前 varchar(10))
- 日付型:DATE, DATETIME, TIMESTAMPなど
テーブル操作 - 変更
-- フィールドの追加 ALTER TABLE テーブル名 ADD フィールド名 型(長さ)[COMMENT コメント]; -- データ型の変更 ALTER TABLE テーブル名 MODIFY フィールド名 新しいデータ型(長さ); -- フィールド名とデータ型の変更 ALTER TABLE テーブル名 CHANGE 旧フィールド名 新フィールド名 型(長さ)[COMMENT コメント][制約]; -- テーブル名の変更 ALTER TABLE 旧テーブル名 RENAME TO 新テーブル名;
テーブル操作 - 削除
-- フィールドの削除 ALTER TABLE テーブル名 DROP フィールド名; -- テーブルの削除 DROP TABLE [IF EXISTS] テーブル名; -- テーブルの削除と再作成 TRUNCATE TABLE テーブル名;
DML (Data Manipulation Language)
データの追加
-- 指定したフィールドにデータを追加 INSERT INTO テーブル名(フィールド1, フィールド2...) VALUES(値1, 値2,...); -- すべてのフィールドにデータを追加 INSERT INTO テーブル名 VALUES(値1, 値2,...); -- 一括データ追加 INSERT INTO テーブル名(フィールド名1, フィールド名2...) VALUES(値1, 値2,...), (値1, 値2,...), (値1, 値2,...); INSERT INTO テーブル名 VALUES(値1, 値2,...), (値1, 値2,...);
注意点:
- データを挿入する際、指定したフィールドの順序と値の順序は対応させる必要があります。
- 文字列と日付型のデータは引用符で囲む必要があります。
- 入力するデータのサイズは、フィールドで指定された範囲内である必要があります。
データの更新
UPDATE テーブル名 SET フィールド名1=値1, フィールド名2=値2, ... [WHERE 条件];
データの削除
DELETE FROM テーブル名 WHERE 条件;
注意点:
- DELETE文の条件は省略可能です。条件がない場合は、テーブル内のすべてのデータが削除されます。
- DELETE文では各フィールドの値を個別に削除することはできません(UPDATE文を使用できます)。
DQL (Data Query Language)
基本構文
SELECT フィールドリスト FROM テーブルリスト WHERE 条件リスト GROUP BY 分野フィールドリスト HAVING 分野後の条件リスト ORDER BY ソートフィールドリスト LIMIT ページネーションパラメータ;
基本クエリ
-- 複数フィールドのクエリ SELECT フィールド1, フィールド2... FROM テーブル名; -- すべてのフィールドをクエリ SELECT * FROM テーブル名; -- エイリアスの設定 SELECT フィールド1 [AS エイリアス1], フィールド2 [AS エイリアス2] ... FROM テーブル名; -- 重複レコードの削除 SELECT DISTINCT フィールドリスト FROM テーブル名;
条件クエリ (WHERE)
SELECT フィールドリスト FROM テーブル名 WHERE 条件リスト;
パターンマッチング:'%' 任意の文字列、'_' 任意の1文字、'--' 2文字、'%x' xで終わる文字列
集計関数
意味:1列のデータを全体として、縦方向の計算を行います。
SELECT 集計関数(フィールドリスト) FROM テーブル名 [WHERE...];
注意:NULL値は集計に参加しません。
グループクエリ
SELECT フィールドリスト FROM テーブル名 [WHERE 条件] GROUP BY グループフィールド名 [HAVING グループ後のフィルタ条件]
注意:実行順序:WHERE > 集計関数 > HAVING。グループ化後、クエリのフィールドは通常、集計関数とグループフィールドのみです。他のフィールドをクエリすることに意味はありません。
ソートクエリ
SELECT フィールドリスト FROM テーブル名 ORDER BY フィールド1 ソート方法1, フィールド2 ソート方法2;
ソート方法:
- ASC:昇順(デフォルト)
- DESC:降順
注意:複数フィールドソートの場合、最初のフィールドの値が同じ場合にのみ、2番目のフィールドに基づいてソートされます。
ページネーションクエリ
SELECT フィールドリスト FROM テーブル名 LIMIT 開始インデックス, クエリレコード数;
注意:
- 開始インデックスは0から始まります。開始インデックス = (クエリページ番号 - 1) × 1ページあたりの表示レコード数
- ページネーションクエリはデータベースの方言であり、異なるデータベースで実装が異なります。MySQLではLIMITを使用します。
- 最初のページデータをクエリする場合、開始インデックスは省略可能で、直接LIMIT 10と簡略化できます。
DCL (Data Control Language)
ユーザー管理
-- ユーザーを表示 USE mysql; SELECT * FROM user; -- ユーザー作成 CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード'; -- ホスト名が%の場合、任意のホストからアクセス可能 -- パスワード変更 ALTER USER 'ユーザー名'@'ホスト名' IDENTIFIED WITH mysql_native_password BY '新しいパスワード'; -- ユーザー削除 DROP USER 'ユーザー名'@'ホスト名';
権限管理
-- 権限を表示 SHOW GRANTS FOR 'ユーザー名'@'ホスト名'; -- 権限を付与 GRANT 権限リスト ON データベース名.テーブル名 TO 'ユーザー名'@'ホスト名'; -- 権限を取り消す REVOKE 権限リスト ON データベース名.テーブル名 FROM 'ユーザー名'@'ホスト名';
注意:
- 複数の権限は、コンマで区切ります。
- 権限付与時、データベース名とテーブル名は*を使用してワイルドカードを指定でき、すべてを表します。