以前、Adminerを使ってWordPressのMySQLを編集しました。今回はMAMP上のMySQLを編集します。MAMPのphpMyAdminは使わずにターミナルから操作してみます。DBの基本操作CRUDにトライ。それではいきましょう!
【目次】
- RDBとは
- MySQLとは
- データベースの基本操作CRUD
- MAMPからphpMyAdminを開く
- ターミナルからMAMPのMySQLに接続
- データベースを表示(SHOW DATABASES)
- データベースを作成(CREATE DATABASE)
- データベースを選択(USE文)
- テーブルを作成(CREATE TABLE)
- Create:データの追加(INSERT文)
- Read:データの取得(SELECT文)
- Update:データの更新(UPDATE文)
- Delete:データの削除(DELETE文)
- MySQLを閉じる
- 最後に
※参考:前回記事
AdminerからSQL文で「我輩は猫である」を「犬」にしてみる(WordPressのDB操作:その2) - クモのようにコツコツと
※参考:Web開発環境についてのまとめ
qiita.com
RDBとは
一般的なデータベースはRDB(リレーショナルデータベース)と言って、エクセルの様な表形式になっている。
- テーブル=シート
- レコード=列
- カラム=行
- フィールド=セル
※参考:データベースの用語を理解しよう 「テーブル」「レコード」「カラム」「フィールド」とは?
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」を押す。
こちらのページが開く。
http://localhost:8888/MAMP/
上のメニュー「TOOLS」から「PHPMYADMIN」を押す。
こちらのページから開く。
http://localhost:8888/phpMyAdmin/
前回の「Adminer」の様にここからもCRUD処理が可能だが、今回はターミナルから行ってみたい。
※参考:AdminerからSQL文で「我輩は猫である」を「犬」にしてみる(WordPressのDB操作:その2) - クモのようにコツコツと
ターミナルからMAMPのMySQLに接続
こちらの記事を参考に進めてみる。
※参考:MAMPのMySQLをコマンドラインで操作 - Macターミナル - MAMPの使い方 - MySQL入門 - Webkaru
まずターミナルを開き、cd
コマンドで下記のディレクトリに移動する
cd /Applications/MAMP/Library/bin/
このディレクトリをFinderで見ると色々なファイルが入っているがMySQLぽい名前も見受けられる。
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上の表示とも一致している♪
データベースを作成(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上の表示 こちらも「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
は整数型のMEDIUMINT
、name
とpart
は文字列VARCHAR
- オプション:
id
は必須のNOT NULL
、自動連番のAUTO_INCREMENT
- プライマリーキー:
id
に設定
途中ERROR 1064 (42000):
、ERROR 1075 (42000):
などのエラーがあり、最終的にid
のAUTO_INCREMENT
にPRIMARY 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」も作られている。
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上の表示
スチュとピートも追加する。このフルメンバーでハンブルグ巡業に行った。
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上の表示
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上の表示
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の画面
MySQLを閉じる
最後にMySQLを閉じる。
\q
実行結果
Bye
先ほどまで表示されていたmysql>
もなくなる。
※参考:MySQLサーバー接続・切断、データベース選択|サーバー関連|MySQL|PHP & JavaScript Room
最後に
ということで、MAMP上のMySQLのデータベースにターミナルからCRUDできました!
phpMyAdmin上の表示にもちゃんと反映されていて、遠隔操作をしている様な気分です♪
次回はRDBではなくNoSQLのデータベースとしてJSON ServerをターミナルからCRUDをしてみたく思います。
それではまた!
※参考:Web開発環境についてのまとめ
qiita.com