データベース管理
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言語の分類
-
DDL(データ定義言語):データベースオブジェクトを作成する言語(データベース、テーブル、インデックスなど) CREATE, DROP
-
DML(データ操作言語):テーブル内のデータを操作する言語 SELECT, UPDATE, INSERT, DELETE
-
DQL(データ照会言語):データベースからデータを照会する言語 SELECT
-
DCL(データ制御言語):データベースユーザーのロールと権限を制御する言語 GRANT, REVOKE
-
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);
古い列名 新しい列名 # データ型は変更せず、列名のみ変更する場合はデータ型を再指定する必要があります