SQL

MySQLのメモ

公開日:2021-11-03 更新日:2023-06-10

MySQLのメモです。

環境構築

こちらのサイトを参考にしました。

データベース関連

まずはサーバーに接続します。

mysql -u root -p

パスワードを入力すると接続完了です。

ログアウトして接続をやめる場合はexitquitと入力してEnterを押せばログアウトでができます。 データベースの基本的な操作コマンドを書いていきます。

データベース一覧の取得

SHOW DATABASES;コマンドで行います。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.00 sec)

show databases;と小文字で打っても大丈夫です。

以降、小文字で打っていきます。

データベースの作成

create database db名;で作成します。

mysql> create database sample_db;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sample_db          |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)

sample_dbが追加されました。

データベースの削除

drop database db名;で行います。

mysql> drop database sample_db;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.00 sec)

先ほど作成したsample_dbが削除されました。

使用するdbを選択する

use db名;で選択します。

music_dbというデータベースを作成して選択します。

mysql> create database music_db;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| music_db           |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)

mysql> use music_db;
Database changed

テーブル関連

テーブルを作成する

以下のように作成します。

CREATE TABLE テーブル名 (
  カラム名 データ型 オプション,
  カラム名 データ型 オプション,...
);

例えばidと名前と性別というカラムを持つsingerというテーブルを作成してみます。

mysql> create table singer(
    -> id int,
    -> name varchar(10),
    -> sex varchar(10)
    -> )
    -> ;

テーブル名を一覧で表示

show tables;コマンドで行います。

mysql> show tables;
+--------------------+
| Tables_in_music_db |
+--------------------+
| singer             |
+--------------------+
1 row in set (0.02 sec)

先ほど作成したsingerテーブルが表示されました。

テーブルにデータを追加する

insert into文を下記のように使います。

mysql> insert into singer values(
    -> 1,
    -> '柴田聡子',
    -> 'female'
    -> );

一回で複数のレコードの挿入

一回のinsert文で複数行挿入するときは下記のように行います。

mysql> insert into singer
    -> (id, name, sex)
    -> values
    -> (2,'カネコアヤノ','female'),
    -> (3,'前野健太','male');

select文

select * from テーブル名でテーブル内の全てのカラムを取得します。

mysql> select * from singer;
+------+--------------+--------+
| id   | name         | sex    |
+------+--------------+--------+
|    1 | 柴田聡子     | female |
|    2 | カネコアヤノ | female |
|    3 | 前野健太     | male   |
+------+--------------+--------+
3 rows in set (0.01 sec)

特定のカラムを取得する場合は以下のようにします。

mysql> select name from singer;
+--------------+
| name         |
+--------------+
| 柴田聡子     |
| カネコアヤノ |
| 前野健太     |
+--------------+
3 rows in set (0.00 sec)

where文で絞り込む

mysql> select name from singer
    -> where sex = 'female';
+--------------+
| name         |
+--------------+
| 柴田聡子     |
| カネコアヤノ |
+--------------+
2 rows in set (0.01 sec)

alter table文で編集する

alter table文を使うとtableの情報を編集できます。

カラムを追加する

カラムを追加します。

alter table テーブル名 add 新規カラム名 型情報 オプション;

年齢を表すageというカラムを加えてみます。

mysql> alter table singer add age int;

mysql> select * from singer
    -> ;
+------+--------------+--------+------+
| id   | name         | sex    | age  |
+------+--------------+--------+------+
|    1 | 柴田聡子     | female | NULL |
|    2 | カネコアヤノ | female | NULL |
|    3 | 前野健太     | male   | NULL |
+------+--------------+--------+------+
3 rows in set (0.00 sec)

カラムを削除する

年齢はよくよく考えるとその時によって変わるので、削除します。

mysql> alter table singer drop column age;

mysql> select * from singer;
+------+--------------+--------+
| id   | name         | sex    |
+------+--------------+--------+
|    1 | 柴田聡子     | female |
|    2 | カネコアヤノ | female |
|    3 | 前野健太     | male   |
+------+--------------+--------+
3 rows in set (0.00 sec)

位置を指定して追加

年齢はあまりよくないので、代わりに誕生日を入れましょう。

afterで位置を指定するとnameの後に入れることができます。

mysql> alter table singer add
    -> birthday varchar(10)
    -> after name
    -> ;

mysql> select * from singer;
+------+--------------+----------+--------+
| id   | name         | birthday | sex    |
+------+--------------+----------+--------+
|    1 | 柴田聡子     | NULL     | female |
|    2 | カネコアヤノ | NULL     | female |
|    3 | 前野健太     | NULL     | male   |
+------+--------------+----------+--------+
3 rows in set (0.00 sec)

afterの代わりにfirstを使うと一番最初に挿入できます。

カラム定義を変更する

birthdayは文字列よりも日付型で管理した方がよさそうです。

changemodifyを使用します。

alter table テーブル change カラム名 新カラム名 データ型;

mysql> alter table singer change
    -> birthday hoge date;

mysql> select * from singer
    -> ;
+------+--------------+------+--------+
| id   | name         | hoge | sex    |
+------+--------------+------+--------+
|    1 | 柴田聡子     | NULL | female |
|    2 | カネコアヤノ | NULL | female |
|    3 | 前野健太     | NULL | male   |
+------+--------------+------+--------+
3 rows in set (0.00 sec)

データ型の確認はshow columns テーブル名で行えます。

mysql> show columns from singer;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| hoge  | date        | YES  |     | NULL    |       |
| sex   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

元に戻しましょう。

mysql> alter table singer change
    -> hoge birthday varchar(10);

modifyで型だけ変更します。

alter table テーブル名 modify カラム名 データ型

mysql> alter table singer modify birthday date;

mysql> show columns from singer
    -> ;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| name     | varchar(10) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| sex      | varchar(10) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

複数カラムの追加

出生地とジャンルを加えてみます。

alter table テーブル名 add (新規カラム名1 型情報, 新規カラム名2 型情報, ...);

mysql> alter table singer add(
    -> birthplace varchar(255),
    -> genre varchar(10)
    -> );

mysql> select * from singer
    -> ;
+------+--------------+----------+--------+------------+-------+
| id   | name         | birthday | sex    | birthplace | genre |
+------+--------------+----------+--------+------------+-------+
|    1 | 柴田聡子     | NULL     | female | NULL       | NULL  |
|    2 | カネコアヤノ | NULL     | female | NULL       | NULL  |
|    3 | 前野健太     | NULL     | male   | NULL       | NULL  |
+------+--------------+----------+--------+------------+-------+
3 rows in set (0.00 sec)

データを更新する

これまで書いてきたことを元にNULLの部分にデータを補完してみましょう。

mysql> insert into singer (birthday,birthplace,genre) values
    -> ('1986-12-11','Sapporo, Hokkaido', 'pop'),
    -> ('1993-01-30', 'Yokohama, Kanagawa', 'rock'),
    -> ('1979-02-06', 'Iruma Saitama', 'pop');

いっけんこれでよさそうですが…

mysql> select * from singer;
+------+--------------+------------+--------+--------------------+-------+
| id   | name         | birthday   | sex    | birthplace         | genre |
+------+--------------+------------+--------+--------------------+-------+
|    1 | 柴田聡子     | NULL       | female | NULL               | NULL  |
|    2 | カネコアヤノ | NULL       | female | NULL               | NULL  |
|    3 | 前野健太     | NULL       | male   | NULL               | NULL  |
| NULL | NULL         | 1986-12-11 | NULL   | Sapporo, Hokkaido  | pop   |
| NULL | NULL         | 1993-01-30 | NULL   | Yokohama, Kanagawa | rock  |
| NULL | NULL         | 1979-02-06 | NULL   | Iruma Saitama      | pop   |
+------+--------------+------------+--------+--------------------+-------+
6 rows in set (0.00 sec)

こんな風になってしまいました。 修正していきましょう。

レコードを削除する

まずは間違えて追加してしまったレコードを削除しましょう。

delete from テーブル名 where 条件で削除できます。

idがNULLのものを削除します。

NULLのものを削除するときは= NULLとせずにis NULLとすることがポイントです。

mysql> delete from singer where id is NULL;

mysql> select * from singer;
+------+--------------+----------+--------+------------+-------+
| id   | name         | birthday | sex    | birthplace | genre |
+------+--------------+----------+--------+------------+-------+
|    1 | 柴田聡子     | NULL     | female | NULL       | NULL  |
|    2 | カネコアヤノ | NULL     | female | NULL       | NULL  |
|    3 | 前野健太     | NULL     | male   | NULL       | NULL  |
+------+--------------+----------+--------+------------+-------+
3 rows in set (0.00 sec)

元の状態に戻せました。

updateで更新する。

改めて追加しましょう。

データを更新する際はinsertではなくupdateを使います。

mysql> update singer
    -> set birthday = '1986-12-11',
    -> birthplace = 'Sapporo Hokkaido',
    -> genre = 'pop'
    -> where id = 1;

mysql> select * from singer;
+------+--------------+------------+--------+------------------+-------+
| id   | name         | birthday   | sex    | birthplace       | genre |
+------+--------------+------------+--------+------------------+-------+
|    1 | 柴田聡子     | 1986-12-11 | female | Sapporo Hokkaido | pop   |
|    2 | カネコアヤノ | NULL       | female | NULL             | NULL  |
|    3 | 前野健太     | NULL       | male   | NULL             | NULL  |
+------+--------------+------------+--------+------------------+-------+
3 rows in set (0.00 sec)

複数の行を一括でupdateしたい場合はすこし複雑になります。

mysql> update singer
    -> set birthday =
    -> case id
    ->  when 2 then '1993-01-30'
    ->  when 3 then '1979-02-06'
    -> end
    -> where id in (2,3);

mysql> select * from singer;
+------+--------------+------------+--------+------------------+-------+
| id   | name         | birthday   | sex    | birthplace       | genre |
+------+--------------+------------+--------+------------------+-------+
|    1 | 柴田聡子     | 1986-12-11 | female | Sapporo Hokkaido | pop   |
|    2 | カネコアヤノ | 1993-01-30 | female | NULL             | NULL  |
|    3 | 前野健太     | 1979-02-06 | male   | NULL             | NULL  |
+------+--------------+------------+--------+------------------+-------+
3 rows in set (0.01 sec)

残りも地道に追加します。

mysql> update singer
    -> birthplace= 'Yokohama,Kanagawa',
    -> genre = 'rock'
    -> where name = 'カネコアヤノ';

mysql> update singer
    -> birthplace = 'Iruma,Saitama',
    -> genre = 'pop'
    -> where id = 3;

mysql> select * from singer
    -> ;
+------+--------------+------------+--------+-------------------+-------+
| id   | name         | birthday   | sex    | birthplace        | genre |
+------+--------------+------------+--------+-------------------+-------+
|    1 | 柴田聡子     | 1986-12-11 | female | Sapporo Hokkaido  | pop   |
|    2 | カネコアヤノ | 1993-01-30 | female | Yokohama,Kanagawa | rock  |
|    3 | 前野健太     | 1979-02-06 | male   | Iruma,Saitama     | pop   |
+------+--------------+------------+--------+-------------------+-------+
3 rows in set (0.00 sec)

そのほか

ホスト名を調べる show variables like 'hostname';

ユーザー名を調べる SELECT User, Host FROM mysql.user;

Twitter Share