KAKUTA TECH BLOG

Blog Article

MySQLの基本操作をまとめる

はじめに

MySQLを学習し始めたので、データベースの基本概念から、データベース・テーブルの作成、データの登録・取得・更新・削除、WHERE や ORDER BY を使った検索・並び替えまで、基本操作をまとめます。

参考リンク

データベースとは?

データベースとは、データを整理して保存し、必要なときに検索・追加・更新・削除できるようにした仕組みです。たとえば、ユーザー情報を管理する場合、名前やメールアドレスなどのデータを整理して保存しておけば、特定のユーザーを検索したり、登録情報を変更したりできます。大量のデータを扱う場合でも、単にファイルへ保存するだけではなく、データの構造や検索方法を定めることで効率的に管理できます。今回扱うMySQLでは、データベースの中にテーブルを作成し、そのテーブルに実際のデータを保存していきます。

リレーショナルデータベース(RDB)とは?

リレーショナルデータベース(RDB)は、データを表形式の「テーブル」として管理する方式です。テーブルは行と列で構成され、列にはデータの項目、行には1件分のデータを格納します。また、複数のテーブルを関連付けて管理できることもRDBの特徴です。たとえば、ユーザー情報を users テーブル、注文情報を orders テーブルとして分け、それぞれのユーザーIDを使って関連付けることができます。このようにデータを役割ごとに分けて管理することで、複雑なデータも整理しやすくなります。

データベース管理システム(DBMS)とは?

データベースを実際に操作・管理するためのソフトウェアを、データベース管理システム(DBMS)といいます。DBMSを利用すると、データの登録・検索・更新・削除だけでなく、テーブルの作成やユーザーの権限管理なども行えます。MySQL、PostgreSQL、SQLite、Oracle DatabaseなどがDBMSに該当します。つまり、データそのものを保存する「データベース」と、それを操作・管理する「DBMS」は同じものではありません。今回学習するMySQLは、RDBを扱うDBMSの一つです。

MySQLの基本操作

ここからは、実際にMySQLを操作しながら基本的なSQLを確認します。大まかな流れは、「MySQLへ接続する → データベースを作成する → データベースを選択する → テーブルを作成する → レコードを登録する → レコードを取得・更新・削除する」という順番です。この流れを一通り経験しておくと、SQLがそれぞれ何のために存在するのかを理解しやすくなります。今回は sample_db データベースと users テーブルを作成し、実際のデータを操作していきます。

MySQLに接続する

MySQLを操作するには、MySQLサーバーへ接続する必要があります。コマンドラインからMySQLクライアントを起動する場合は、次のように入力します。-u は接続に使用するユーザー名を指定するオプションで、-p を付けるとパスワードの入力を求められます。接続に成功すると、MySQLのコンソールからSQLを実行できるようになります。

mysql -u root -p

パスワードを入力して接続できれば、MySQLを操作する準備は完了です。

データベースを作成する

MySQLでは、データを管理するための入れ物としてデータベースを作成します。データベースを作成するには CREATE DATABASE 文を使用します。今回は sample_db という名前のデータベースを作成します。MySQL公式ドキュメントでも、データベースを作成して選択し、その中にテーブルを作成してデータを登録・取得する流れが基本的な操作として説明されています。

CREATE DATABASE sample_db;

作成したデータベースを確認するには、SHOW DATABASES を使用します。

SHOW DATABASES;

作成した sample_db が一覧に表示されていれば、データベースが作成されています。

使用するデータベースを選択する

作成したデータベースを操作するには、USE 文を使って使用するデータベースを選択します。データベースを選択すると、それ以降に作成するテーブルなどが、そのデータベースを対象として扱われます。今回は先ほど作成した sample_db を選択します。

USE sample_db;

現在どのデータベースを使用しているか確認したい場合は、SELECT DATABASE(); を実行できます。

SELECT DATABASE();

テーブルを作成する

データベースを作成しただけでは、まだ実際のデータを保存する場所はありません。そこで、データを表形式で管理するための「テーブル」を作成します。テーブルには、ユーザー名やメールアドレスのような項目を「カラム」として定義し、1人分のユーザー情報を1行の「レコード」として保存します。今回は users テーブルを作成し、ユーザーを識別する id、名前を保存する name、メールアドレスを保存する email を定義します。CREATE TABLE はテーブルを定義するためのSQL文です。

usersテーブルを作成する

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);

id はユーザーを識別するためのカラムです。PRIMARY KEY を指定しているため、テーブル内で重複しない値として扱われます。また、AUTO_INCREMENT によって、新しいレコードを追加した際に値を自動的に増加させられます。

name と email は、それぞれ名前とメールアドレスを保存するカラムです。VARCHAR(100) は最大100文字の可変長文字列を扱うデータ型です。

テーブルの詳細を確認する

作成したテーブルのカラムやデータ型を確認するには、DESC 文を使用できます。

DESC users;

実行すると、カラム名、データ型、NULLを許可するか、主キーかどうかなどの情報を確認できます。

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | YES  |     | NULL    |                |
| email | varchar(100) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

ALTER TABLEでテーブルを変更する

テーブルを作成した後でも、カラムの追加やデータ型の変更など、テーブルの定義を変更できます。そのような場合に使用するのが ALTER TABLE 文です。最初に作成したテーブルに対して、あとから必要になったカラムを追加したり、既存のカラムの定義を変更したりできます。テーブルを最初から作り直す必要がないため、データを保持したまま構造を変更したい場合に使用します。ただし、本番環境などで既存データを持つテーブルを変更するときは、影響範囲を確認することが重要です。

カラムのデータ型を変更する

MODIFY を使用すると、既存のカラム定義を変更できます。

ALTER TABLE users
MODIFY id INT UNSIGNED AUTO_INCREMENT;

この例では、id のデータ型を INT UNSIGNED に変更しています。

新しいカラムを追加する

新しいカラムを追加する場合は ADD COLUMN を使用します。

ALTER TABLE users
ADD COLUMN age INT AFTER email;

age という整数型のカラムを追加し、AFTER email によって email の後ろに配置しています。

DESC users;

実行すると、email の後ろに age が追加されていることを確認できます。

レコードを操作する

テーブルを作成したら、実際のデータを登録して操作していきます。SQLでは、データを追加する INSERT、取得する SELECT、更新する UPDATE、削除する DELETE などの文を使い分けます。これらはデータベース操作の基本となるため、それぞれが「何をするSQLなのか」を理解しておくことが重要です。ここでは、先ほど作成した users テーブルを使って、データの登録から取得、更新、削除までを確認します。

レコードを挿入する

テーブルにデータを追加するには、INSERT INTO を使用します。

INSERT INTO users (name, email, age)
VALUES
  ('山田太郎', 'yamada@example.com', 21),
  ('佐藤大樹', 'sato@example.com', 26),
  ('山本早紀', 'yamamoto@example.com', 28),
  ('田中瑞希', 'tanaka@example.com', 30),
  ('工藤高次', 'kudo@example.com', 40),
  ('石田裕子', 'ishida@example.com', 48),
  ('加藤裕二', 'kato@example.com', 55);

この例では、name、email、age の値を指定して7件のレコードをまとめて登録しています。id は AUTO_INCREMENT を指定しているため、値を指定しなくても自動的に設定されます。

レコードを取得する

登録したデータを確認するには、SELECT 文を使用します。

SELECT * FROM users;

* は、テーブルに存在するすべてのカラムを取得することを表します。

特定のカラムだけ取得したい場合は、カラム名を指定します。

SELECT name, email FROM users;

この場合は name と email の2つのカラムだけが取得されます。

レコードを更新する

既存のレコードを変更するには、UPDATE 文を使用します。どのレコードを更新するのかは WHERE 句で指定します。たとえば、id が1のユーザーの名前を変更する場合は、次のように記述します。

UPDATE users
SET name = '佐藤花子'
WHERE id = 1;

WHERE を付けずに UPDATE を実行すると、条件に該当するレコードを限定できないため、意図せず複数のレコードを更新してしまう可能性があります。更新処理では、対象を正しく指定することが重要です。

レコードを削除する

レコードを削除するには DELETE 文を使用します。

DELETE FROM users
WHERE id = 1;

この例では、id が1のレコードだけを削除します。UPDATE と同様に、WHERE を付けない場合は対象を限定できないため、テーブル内のすべてのレコードが削除される可能性があります。削除する前には、SELECT で対象を確認しておくと安全です。

テーブルを削除する

テーブルそのものが不要になった場合は、DROP TABLE を使用します。

DROP TABLE users;

DELETE がテーブル内のレコードを削除するのに対して、DROP TABLE はテーブルそのものを削除します。そのため、実行するとテーブルの構造も保存されているデータも失われます。特に本番環境では影響が大きいため、対象のテーブルを確認してから実行する必要があります。

WHERE句を使って条件を指定する

SELECT 文に WHERE 句を追加すると、条件に一致するレコードだけを取得できます。たとえば、「30歳以上のユーザーだけ」「idが6のユーザーだけ」といった条件を指定できます。WHERE はデータを検索するときに非常によく使用するため、比較演算子や AND、OR、LIKE などと組み合わせて使えるようになると、必要なデータをより柔軟に取得できるようになります。MySQLの SELECT 文でも、WHERE は取得する行を条件によって絞り込むために使用されます。

特定のユーザーを取得する

id が6のユーザーだけを取得する場合は、次のように記述します。

SELECT * FROM users
WHERE id = 6;

= は、左辺と右辺が等しいかを比較する演算子です。

比較演算子を使う

WHERE では、値を比較する演算子を使用できます。

演算子

意味

=

等しい

!= または <>

等しくない

>

より大きい

<

より小さい

>=

以上

<=

以下

たとえば、30歳以上のユーザーを取得する場合は次のように記述します。

SELECT * FROM users
WHERE age >= 30;

30歳未満の場合は、< を使用します。

SELECT * FROM users
WHERE age < 30;

AND / ORで複数の条件を指定する

複数の条件を組み合わせる場合は、AND や OR を使用します。AND は指定した条件をすべて満たすレコードを取得し、OR は指定した条件のいずれかを満たすレコードを取得します。たとえば、「30歳以上かつ50歳未満」という条件なら AND、「21歳または55歳」という条件なら OR を使います。この違いを理解しておくと、単純な検索だけでなく、複数の条件を組み合わせた絞り込みもできるようになります。

SELECT * FROM users
WHERE age >= 30 AND age < 50;
SELECT * FROM users
WHERE age = 21 OR age = 55;

LIKEで文字列を部分一致検索する

文字列の一部が一致するレコードを検索するときは、LIKE を使用します。LIKE と一緒に % というワイルドカードを使うことで、「指定した文字列で始まる」「指定した文字列で終わる」「指定した文字列を含む」といった検索ができます。たとえば、名前が「山田」で始まるユーザーや、メールアドレスが @example.com で終わるユーザーを取得できます。

パターン

意味

'A%'

Aで始まる

'%B'

Bで終わる

'%C%'

Cを含む

名前が「山田」で始まるユーザーを取得する場合は、次のように記述します。

SELECT * FROM users
WHERE name LIKE '山田%';

メールアドレスが @example.com で終わるユーザーを取得する場合は、次のように記述できます。

SELECT * FROM users
WHERE email LIKE '%@example.com';

ORDER BYで取得結果を並び替える

WHERE で取得するデータを絞り込んだ後、その結果を特定の順番に並べ替えたい場合は ORDER BY を使用します。たとえば、30歳以上のユーザーだけを取得したうえで、年齢の低い順に並べることができます。ORDER BY の後ろに並び替えたいカラムを指定し、ASC なら昇順、DESC なら降順になります。なお、ASC は省略した場合のデフォルトでもあるため、昇順であれば ORDER BY age と書くこともできます。

年齢の昇順で取得する

30歳以上のユーザーを、年齢が低い順に取得します。

SELECT * FROM users
WHERE age >= 30
ORDER BY age ASC;

ASC は昇順を意味します。年齢が30歳、40歳、48歳、55歳という順番で表示されます。

年齢の降順で取得する

反対に、年齢が高い順に取得する場合は DESC を使用します。

SELECT * FROM users
WHERE age >= 30
ORDER BY age DESC;

この場合は、55歳、48歳、40歳、30歳という順番で表示されます。

WHERE と ORDER BY を組み合わせることで、「どのデータを取得するか」と「取得したデータをどの順番で表示するか」をそれぞれ指定できます。

基本操作を整理する

ここまで学習した操作を整理すると、MySQLではデータベースやテーブルを作成する操作と、テーブルに保存されたレコードを操作するSQLを使い分けていることが分かります。特に CREATE や ALTER はデータベースやテーブルの構造を扱う操作、INSERT・SELECT・UPDATE・DELETE はテーブル内のデータを扱う操作として整理すると、それぞれの役割を覚えやすくなります。

操作

SQL

データベースの作成

CREATE DATABASE データベース名;

データベースの選択

USE データベース名;

テーブルの作成

CREATE TABLE テーブル名 (...);

テーブルの詳細確認

DESC テーブル名;

テーブルの変更

ALTER TABLE ...;

レコードの挿入

INSERT INTO ...;

レコードの取得

SELECT ... FROM ...;

条件指定

WHERE ...;

並び替え

ORDER BY ...;

レコードの更新

UPDATE ... SET ...;

レコードの削除

DELETE FROM ...;

テーブルの削除

DROP TABLE ...;

まとめ

今回は、MySQLを使ううえで最初に覚えておきたい基本操作をまとめました。まずデータベースを作成して USE で選択し、その中にテーブルを作成します。その後、INSERT でデータを登録し、SELECT で取得します。さらに WHERE を使えば条件を指定でき、LIKE で文字列の部分一致検索、ORDER BY で取得結果の並び替えもできます。データを変更するときは UPDATE、削除するときは DELETE を使います。これらの基本操作を実際に繰り返し使うことで、SQLの構文だけでなく、それぞれの命令がどのような場面で必要になるのかも理解しやすくなります。