クモのようにコツコツと

フロントエンドエンジニア イイダリョウの技術ブログ。略称「クモコツ」

【SQL】ターミナルからMAMPのMySQLにCRUDする

以前、Adminerを使ってWordPressのMySQLを編集しました。今回はMAMP上のMySQLを編集します。MAMPのphpMyAdminは使わずにターミナルから操作してみます。DBの基本操作CRUDにトライ。それではいきましょう!

【目次】

※参考:前回記事
AdminerからSQL文で「我輩は猫である」を「犬」にしてみる(WordPressのDB操作:その2) - クモのようにコツコツと

※参考:Web開発環境についてのまとめ
qiita.com

RDBとは

一般的なデータベースはRDB(リレーショナルデータベース)と言って、エクセルの様な表形式になっている。

  • テーブル=シート
  • レコード=列
  • カラム=行
  • フィールド=セル

f:id:idr_zz:20200802145306p:plain

※参考:データベースの用語を理解しよう 「テーブル」「レコード」「カラム」「フィールド」とは?

MySQLとは

RDBを管理するRDBMS(リレーショナルデータベースマネジメントシステム)の中に「MySQL」がある。

※参考:MySQL :: MySQL 5.6 リファレンスマニュアル

データ自体はデータベース言語である「SQL文」を使って操作する。また、ブラウザからGUIで操作するデータベース接続クライアントに「phpMyAdmin」がある。

※参考:サーバサイドの中でのWordPressの位置付け - クモのようにコツコツと

以前、WordPressのローカル環境「Local by Flywheel」に付属する「Adminer」を使ってデータを操作した(phpMyAdminと同じ様な機能)。

※参考:AdminerからSQL文で「我輩は猫である」を「犬」にしてみる(WordPressのDB操作:その2) - クモのようにコツコツと

データベースの基本操作CRUD

データベースの基本操作にCRUD(クラッド)というものがある。Create(データ追加)、Read(データ取得)、Update(データ更新)、Delete(データ削除)の4つになる。

SQL文ではINSERT文、SELECT文、UPDATE文、DELETE文がこれに相当する。

SQL文 CRUD 機能
INSERT文 Create データ追加
SELECT文 Read データ取得
UPDATE文 Update データ更新
DELETE文 Delete データ削除

※参考:【MySQL入門③】データベースの基本操作CRUDを解説! | Snome;

MAMPからphpMyAdminを開く

MAMP環境をインストールしていない場合はこちらを参照

※参考:【Mac】MAMPでPHPの環境構築を行う - Reasonable Code

MAMPを開き「Open WebStart Page」を押す。 f:id:idr_zz:20200802151159j:plain

こちらのページが開く。

http://localhost:8888/MAMP/

f:id:idr_zz:20200802151203j:plain

上のメニュー「TOOLS」から「PHPMYADMIN」を押す。 f:id:idr_zz:20200802151207j:plain

こちらのページから開く。

http://localhost:8888/phpMyAdmin/

f:id:idr_zz:20200802151212j:plain

前回の「Adminer」の様にここからもCRUD処理が可能だが、今回はターミナルから行ってみたい。

※参考:AdminerからSQL文で「我輩は猫である」を「犬」にしてみる(WordPressのDB操作:その2) - クモのようにコツコツと

ターミナルからMAMPのMySQLに接続

こちらの記事を参考に進めてみる。

※参考:MAMPのMySQLをコマンドラインで操作 - Macターミナル - MAMPの使い方 - MySQL入門 - Webkaru

まずターミナルを開き、cdコマンドで下記のディレクトリに移動する

cd /Applications/MAMP/Library/bin/

このディレクトリをFinderで見ると色々なファイルが入っているがMySQLぽい名前も見受けられる。 f:id:idr_zz:20200802152606j:plain

MySQLコマンドを実行

./mysql -u root -p

パスワードを聞かれる

Enter password: xxxx

パスワードは初期値のままの場合は「root」でいけるっぽい。

※参考:「MAMP」の「Mysql」のパスワードは【root】でした。 - Qiita

成功するとMhySQLが起動して下記の様な表示になる。

mysql> 

データベースを表示(SHOW DATABASES)

mysql起動中にはターミナル上でSQL文が使える。下記の記事を参考にしなが進める。

※参考:【MySQL, SQL】データベースを扱う基本SQL一覧 - Qiita

まずは、データベースにちゃんと接続されているか確認したい。

データベースの表示は下記のコマンド。

SHOW DATABASES;

実行結果

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

おお、表示された!

phpMyAdmin上の表示とも一致している♪ f:id:idr_zz:20200802153957j:plain

データベースを作成(CREATE DATABASE)

次はデータベースを新規作成。

データベース新規作成のSQL文はCREATE DATABASE

CREATE DATABASE beatles;

「beatles」というデータベースを作ってみる。

実行結果、OKぽい。

Query OK, 1 row affected (0.02 sec)

データベース一覧を表示して確認する。

SHOW DATABASES;

実行結果

+--------------------+
| Database           |
+--------------------+
| information_schema |
| beatles            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

おお、beatlesが増えている!

phpMyAdmin上の表示 f:id:idr_zz:20200802155616j:plain こちらも「beatles」が増えている!!

データベースを選択(USE文)

次にデータベース「beatles」を選択する。

USE beatles;

実行結果

Database changed

これで複数あるデータベースの内、どのデータベースを編集するか指定した状態になる(この作業を忘れるとエラーになった)。

テーブルを作成(CREATE TABLE)

次にテーブルを作成する。テーブルはエクセルでいうシートの様なもの。

まず、データベース「beatles」の中に幾つのテーブルがあるか表示する。

SHOW TABLES;

実行結果

Empty set (0.01 sec)

中身は空だよ、と。

テーブル作成は下記の様な形式。これまでより少し複雑な構成。

CREATE TABLE [テーブル名] (
column1 [データ型] [その他オプション],
column2 [データ型] [その他オプション],
column3 [データ型] [その他オプション],
);

※参考:【MySQL, SQL】データベースを扱う基本SQL一覧 - Qiita

データ型やオプションについてはこちらを参考にした。

※参考:【MySQL入門】CREATE TABLE文でテーブルを作成する方法 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

CREATE TABLE member (
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100),
    part VARCHAR(100),
    PRIMARY KEY (id)
);
  • データ型:idは整数型のMEDIUMINTnamepartは文字列VARCHAR
  • オプション:idは必須のNOT NULL、自動連番のAUTO_INCREMENT
  • プライマリーキー:idに設定

途中ERROR 1064 (42000):ERROR 1075 (42000):などのエラーがあり、最終的にidAUTO_INCREMENTPRIMARY KEYを設定したらエラーがなくなった

※参考:https://dev.mysql.com/doc/refman/5.6/ja/example-auto-increment.html

テーブル作成が成功したか確認。

SHOW TABLES;

実行結果

+-------------------+
| Tables_in_beatles |
+-------------------+
| member            |
+-------------------+
1 row in set (0.00 sec)

「member」テーブルが作成された!

phpMyAdmin上の表示。カラム「id」「name」「part」も作られている。 f:id:idr_zz:20200802171250j:plain

Create:データの追加(INSERT文)

ここからはデータベースの基本4操作CRUD!

※参考:【MySQL入門③】データベースの基本操作CRUDを解説! | Snome;

CRUDのCはCreateでデータの追加。SQL文ではINSERT文になる。

INSERT INTO テーブル名 (カラム名) VALUES (値);

まずビートルズのリーダー、ジョン・レノンを追加してみる!

INSERT INTO member (name, part) VALUES (
    'ジョン・レノン', 'ギター'
);

「id」は自動連番の設定が効いていると期待して除外してみた…

実行結果

Query OK, 1 row affected (0.01 sec)

お、いけたっぽい!

次はポールとジョージを追加してみよう。ビートルズの前身バンド、クオリーメン時代からの生え抜き。

INSERT INTO member (name, part) VALUES 
    ('ポール・マッカートニー', 'ギター'), 
    ('ジョージ・ハリスン', 'ギター');

実行結果

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

またOKっぽい!

Read:データの取得(SELECT文)

CRUDのRはReadでデータの取得。SQL文ではSELECT文になる。先ほど追加したデータを表示してみる。

SELECT カラム名 FROM テーブル名;

SELECT id, name, part FROM member;

実行結果

+----+-----------------------------------+-----------+
| id | name                              | part      |
+----+-----------------------------------+-----------+
|  1 | ジョン・レノン                    | ギター    |
|  2 | ポール・マッカートニー            | ギター    |
|  3 | ジョージ・ハリスン                | ギター    |
+----+-----------------------------------+-----------+
3 rows in set (0.00 sec)

おお、ちゃんと表形式で表示された!「id」の自動連番もちゃんと振られている!

phpMyAdmin上の表示 f:id:idr_zz:20200802175318j:plain

スチュとピートも追加する。このフルメンバーでハンブルグ巡業に行った。

INSERT INTO member (name, part) VALUES 
    ('スチュアート・サトクリフ', 'ベース'), 
    ('ピート・ベスト', 'ドラム');

実行結果

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

ちゃんと追加されたか確認。

SELECT id, name, part FROM member;

追加された!

+----+--------------------------------------+-----------+
| id | name                                 | part      |
+----+--------------------------------------+-----------+
|  1 | ジョン・レノン                       | ギター    |
|  2 | ポール・マッカートニー               | ギター    |
|  3 | ジョージ・ハリスン                   | ギター    |
|  4 | スチュアート・サトクリフ             | ベース    |
|  5 | ピート・ベスト                       | ドラム    |
+----+--------------------------------------+-----------+
5 rows in set (0.00 sec)

phpMyAdmin上の表示 f:id:idr_zz:20200802175738j:plain

Update:データの更新(UPDATE文)

CRUDのUはUpdateデータの追加。SQL文ではUPDATE文になる。

UPDATE テーブル名 SET カラム名 = 値;

注意事項あり!WHERE id = 1などWHERE句を付ける。

WHERE句を付けないとテーブル内の全レコードを更新することになるので注意が必要です。

※参考:【MySQL入門③】データベースの基本操作CRUDを解説! | Snome;

次はポールのパートをギターからベースにする。スチュは美術の道に転向するからね。

UPDATE member SET part = 'ベース' WHERE id = 2;

WHERE句によってid = 2のポールのみが対象になるはず。

※参考:SELECT構文:WHEREで検索条件を設定する - 第3章 SQL構文 - [SMART]

実行結果

Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

表示してみる。

SELECT id, name, part FROM member;

おお、ポールがギターからベースになった!

+----+--------------------------------------+-----------+
| id | name                                 | part      |
+----+--------------------------------------+-----------+
|  1 | ジョン・レノン                       | ギター    |
|  2 | ポール・マッカートニー               | ベース    |
|  3 | ジョージ・ハリスン                   | ギター    |
|  4 | スチュアート・サトクリフ             | ベース    |
|  5 | ピート・ベスト                       | ドラム    |
+----+--------------------------------------+-----------+
5 rows in set (0.00 sec)

phpMyAdmin上の表示 f:id:idr_zz:20200802181226j:plain

Delete:データの削除(DELETE文)

最後、CRUDのDはDeleteでデータの削除。SQL文ではDELETE文になる。

DELETE FROM テーブル名;

こちらもWHERE句で指定しないと全部消えちゃうので注意!

UPDATE文と同様に、WHERE句を指定しないとテーブル内の全レコードを削除するので、注意が必要です。

※参考:【MySQL入門③】データベースの基本操作CRUDを解説! | Snome;

デビュー前にスチュとピートが脱退するので削除する。

DELETE FROM member WHERE id BETWEEN 4 AND 5;

BETWEEN演算子を使ってidを4〜5の範囲にする。

※参考:SELECT構文:WHEREで検索条件を設定する - 第3章 SQL構文 - [SMART]

実行結果

Query OK, 2 rows affected (0.01 sec)

削除されたか確認する。

SELECT id, name, part FROM member;

うーむ、クオリーメン時代の3人に戻ったぞ。

+----+-----------------------------------+-----------+
| id | name                              | part      |
+----+-----------------------------------+-----------+
|  1 | ジョン・レノン                    | ギター    |
|  2 | ポール・マッカートニー            | ベース    |
|  3 | ジョージ・ハリスン                | ギター    |
+----+-----------------------------------+-----------+
3 rows in set (0.00 sec)

最後のワンピース、リンゴの加入!

INSERT INTO member (name, part) VALUES 
    ('リンゴ・スター', 'ドラム');

実行結果

Query OK, 1 row affected (0.00 sec)

どや!

SELECT id, name, part FROM member;

おお、ついにデビューメンバーに!

+----+-----------------------------------+-----------+
| id | name                              | part      |
+----+-----------------------------------+-----------+
|  1 | ジョン・レノン                    | ギター    |
|  2 | ポール・マッカートニー            | ベース    |
|  3 | ジョージ・ハリスン                | ギター    |
|  6 | リンゴ・スター                    | ドラム    |
+----+-----------------------------------+-----------+
4 rows in set (0.00 sec)

リンゴのidは6になっている。

phpMyAdminの画面 f:id:idr_zz:20200802182519j:plain

MySQLを閉じる

最後にMySQLを閉じる。

 \q

実行結果

Bye

先ほどまで表示されていたmysql>もなくなる。

※参考:MySQLサーバー接続・切断、データベース選択|サーバー関連|MySQL|PHP & JavaScript Room

最後に

f:id:idr_zz:20200802183554j:plain

ということで、MAMP上のMySQLのデータベースにターミナルからCRUDできました!

phpMyAdmin上の表示にもちゃんと反映されていて、遠隔操作をしている様な気分です♪

次回はRDBではなくNoSQLのデータベースとしてJSON ServerをターミナルからCRUDをしてみたく思います。

それではまた!


※参考:Web開発環境についてのまとめ
qiita.com