MySQLデータベース管理ガイド

データベース管理

1. SQL文によるデータベース操作(作成・更新・削除・検索)

2. データベースのバックアップ方法

3. マスター・スレーブ構成と読み書き分離による高可用性

データベースの概念と構文規則

データベース:データを整理、保存、管理するためのリポジトリ

データベース管理システム(DBMS):データを効果的に整理、管理、保存するためのシステムソフトウェア。

MySQL:オープンソースのリレーショナルデータベース管理システム

Oracle:大規模データ処理に一般的に使用(高価)

SQL Server:マイクロソフトが提供するデータベースシステム

MariaDB:MySQLのフォークで、互換性を維持しつつ改良

PostgreSQL:高度な機能を持つオブジェクト関係データベース

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

リレーショナルデータベース:MySQL、Oracle、PostgreSQLなど

リレーショナルデータベースの構造:二次元のテーブル形式で、行と列から構成されます

列:オブジェクトの属性(フィールド)

行:オブジェクトの具体的な情報

行+列=テーブル

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

キャッシュ型データベース:Redis

検索型データベース:Elasticsearch

ドキュメント型データベース:MongoDB

キー・バリュー形式のストレージ構造

キーとバリューのペアでデータを保存

リレーショナルとノンリレーショナルデータベースの比較:

リレーショナルデータベースの長所:

  • テーブル構造が明確で論理整理が容易
  • データの整合性が保たれ、記録が比較的完全
  • 外部キーによるテーブル間の関係性を表現可能

短所:

  • 読み書き速度が比較的遅い
  • 同時実行処理の性能に課題
  • データ移行が複雑

ノンリレーショナルデータベースの長所:

  • 高い同時実行読み書き性能
  • 大規模データでも効率的なストレージとアクセス
  • アーキテクチャの拡張性が高い

短所:

  • キー・バリュー形式のためデータ構造が複雑に見える
  • Redisのようにメモリ上にデータを保存する場合、再起動時にデータが失われる可能性がある

MySQLのデータ型

CHAR

CHAR:固定長の文字列型で、固定長の文字列を保存するために使用

CHARで長さが定義されると、値の内容に関わらず固定バイト数を占有。ディスク上では常に4バイトで保存されます。

VARCHAR

VARCHAR:可変長の文字列型で、可変長の文字列を保存

VARCHARは文字列の長さに応じて保存領域が変化。保存される文字列の末尾には非表示の終端文字が追加され、1バイト余分に占有されます。

VARCHARはCHARよりディスクスペースを節約できます

読み書き性能:CHARは連続したディスク空間を使用するため、読み書き性能がVARCHARより優れています。

VARCHARは追加・更新・削除後にディスク断片化を引き起こし、読み書き性能に影響を与える可能性があります

INT:整数データ型を保存

FLOAT:単精度浮動小数点数。float(m,d):mは総桁数、dは小数部の桁数を表します

DOUBLE:倍精度浮動小数点数。double(m,d):mは総桁数、dは小数部の桁数を表します

DATE:日付を保存。形式はYYYY-MM-DD

DATETIME:日付と時刻を保存。形式はYYYY-MM-DD HH:MM:SS

TIMESTAMP:DATETIMEに似ていますが、現在時刻を自動記録できます

SMALLINT:小さな整数を保存

BIGINT:大きな整数を保存

DECIMAL(5,2):高精度の浮動小数点数を保存。5は総桁数、2は小数部の桁数を表します

データベースの管理

データベース操作(CRUD)------ SQL文

SQLの主要用語

データベース:database テーブル:table 行:row 列:column インデックス:index ビュー:view ユーザー:user 権限:privilege ストアドプロシージャ:procedure ストアドファンクション:function スケジューラ:event

SQLの言語規則

データベースシステムではSQL文は大文字・小文字を区別しません。大文字を使用することを推奨

SQLは単行でも複数行でも記述可能。必ずセミコロンで終了させる必要があります

命名規則

データベース名、テーブル名、列名はアルファベットで始まり、その後に数字や特殊記号を続けることができます

MySQLの予約語は使用しないでください

データベース名、テーブル名、ユーザー名は大文字・小文字を厳密に区別します

SQL言語の分類

  1. DDL(データ定義言語):データベースオブジェクトを作成する言語(データベース、テーブル、インデックスなど) CREATE, DROP

  2. DML(データ操作言語):テーブル内のデータを操作する言語 SELECT, UPDATE, INSERT, DELETE

  3. DQL(データ照会言語):データベースからデータを照会する言語 SELECT

  4. DCL(データ制御言語):データベースユーザーのロールと権限を制御する言語 GRANT, REVOKE

  5. TCL(トランザクション制御言語):データベースのトランザクションを管理する言語 COMMIT, ROLLBACK, SAVEPOINT

DDL:データベースとテーブルの作成

データベース作成文は連続したもので、セミコロンで終了すると完全なSQL文とみなされます。
1文を複数行に分割することも可能ですが、可読性が低下するため非推奨です。
キーワードは行を跨げません。

CREATE TABLE product_info(
    id INT(4) NOT NULL,
    -- 列の属性を定義。NOT NULLはデータ型が空でないことを示します
    product_name VARCHAR(50),
    price DECIMAL(10,2),
    stock_quantity INT(11),
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Null | Key | Default | Extra
-----+-----+---------+-------
NO   | PRI | NULL    |       
NO   |     | NULL    |       
YES  |     | NULL    |       
YES  |     | NULL    |       
YES  |     | NULL    |       
YES  |     | NULL    |       
​
Key:主キーまたは外部キーかどうかを示す
Default:データがない場合のデフォルト表示結果
Extra:列の追加情報(自動増分など)
​
DROP DATABASE sales_db;
# テーブルの追加
CREATE TABLE sales_data (
    sale_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    sale_date DATE,
    quantity INT,
    total_amount DECIMAL(10,2)
);

# テーブルの削除
DROP TABLE sales_data;

DML:データの挿入

書式1
INSERT INTO product_info (id, product_name, price) VALUES(101, 'スマートフォン', 59999.00);

書式2
INSERT INTO product_info VALUES(102, 'タブレット', 39999.00, 50, '高解像度ディスプレイ', '2023-01-15');

NULLと空文字列の違い:
NULLは値が存在しないことを示す
空文字列は値が存在するが中身が空であることを示す

データの更新と変更(UPDATE)

UPDATE テーブル名 SET 列名=値 WHERE 条件;
UPDATE product_info SET price=54999.00 WHERE id = 101;
UPDATE product_info SET product_name='最新スマートフォン' WHERE id = 101;
テーブルデータの削除(DELETE)
DELETE FROM テーブル名 WHERE 条件;
DELETE FROM product_info WHERE id=101;

DQL:データ照会

SELECT 照会内容 FROM テーブル名;
SELECT id, product_name, price FROM product_info;
SELECT product_name, price FROM product_info;
SELECT price FROM product_info;
SELECT * FROM product_info LIMIT 0,3;
1-3行を照会
重複のない照会
SELECT DISTINCT product_name FROM product_info;
SELECT DISTINCT category FROM product_info;

WHERE文による条件抽出

AND条件
SELECT * FROM product_info WHERE id = 101 AND price > 50000;
OR条件
SELECT * FROM product_info WHERE id = 101 OR price < 30000;
​

あいまい照会(LIKE)

指定の文字で終わる
SELECT * FROM product_info WHERE product_name LIKE '%ン';
指定の文字で始まる
SELECT * FROM product_info WHERE product_name LIKE 'ス%';
指定の文字を含む
SELECT * FROM product_info WHERE product_name LIKE '%スマート%';

ALTER:テーブル名と構造の変更

ALTER TABLE テーブル名 RENAME 新しいテーブル名;
ALTER TABLE product_info RENAME products;

テーブルに列を追加

ALTER TABLE products add supplier VARCHAR(50) DEFAULT '不明';
NULLの箇所は「不明」に設定されます

列のデータ型の変更

ALTER TABLE products MODIFY COLUMN supplier CHAR(30);
列の削除
ALTER TABLE テーブル名 DROP 列名
ALTER TABLE products DROP supplier;

列名の変更

ALTER TABLE products CHANGE product_name item_name VARCHAR(100);
               古い列名              新しい列名    # データ型は変更せず、列名のみ変更する場合はデータ型を再指定する必要があります

タグ: MySQL データベース SQL DDL DML

5月19日 05:32 投稿