MySQL 基本構文ガイド

MySQL 基本構文ガイド

MySQL データベース

MySQLデータベースに接続するには、以下のコマンドを使用します:

mysql -u root -p

リレーショナルデータベース

概念:リレーショナルモデルに基づき、複数の相互接続された2次元テーブルで構成されるデータベースです。

特徴:

  • 表形式でデータを保存し、形式が統一されているためメンテナンスが容易です。
  • SQL言語を使用して操作でき、標準化されており使いやすいです。

SQL構文

一般的な構文規則:

  1. SQL文は単一行または複数行で記述でき、セミコロンで終わります。
  2. SQL文にはスペースやインデントを使用して可読性を向上させることができます。
  3. MySQLのSQL文は大文字と小文字を区別しません。キーワードは大文字を使用することをお勧めします。
  4. コメント:
    • 単行コメント:-- コメント内容 または # コメント内容(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 'ユーザー名'@'ホスト名';

注意:

  • 複数の権限は、コンマで区切ります。
  • 権限付与時、データベース名とテーブル名は*を使用してワイルドカードを指定でき、すべてを表します。

タグ: MySQL SQL データベース データ操作 クエリ

6月10日 21:44 投稿