Edited at

PHPをやってみたいので、MySQLもやってみる(その3)

More than 3 years have passed since last update.


はじめに

この記事はPHPをやってみたいので、MySQLもやってみる(その2)の続きです。

備忘録なので、足りない分や、もっとこうしたらよかったとかは、後から追加修正していきます。

mysqlでテーブル、フィールドの作成方法がわかったので、次にテーブルにレコードを追加していこうと思います。


テーブルにレコードを入れる

作成したテーブルの各フィールドにレコードを設定していきます。

まずテーブルを作成します。

mysql> create table users (

-> id int not null auto_increment primary key,
-> name varchar(255),
-> email varchar(255),
-> sex enum('male','female') default 'male',
-> created datetime,
-> key name(name)
-> );

作成したテーブルのフィールドの設定を見てみます。

mysql> desc users;

+---------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | MUL | NULL | |
| email | varchar(255) | YES | | NULL | |
| sex | enum('male','female') | YES | | male | |
| created | datetime | YES | | NULL | |
+---------+-----------------------+------+-----+---------+----------------+

テーブルと、フィールドが設定されました。

次にレコードを設定していきます。

idは自動連番が設定されているので指定しません。


sexはデフォルト値が設定されているので、あえて指定しないでみます。


レコードを設定

insert into users (name,email,created) values('taro','taro@gmail.com','2016-03-10 12:00:00');

複数のレコードを一気に設定するには下記のように設定値をカンマで区切ります。

insert into users (name,email,created) values

('taro1','taro1@gmail.com','2016-03-10 12:00:00'),
('taro2','taro2@gmail.com','2016-03-10 12:00:00'),
('taro3','taro3@gmail.com','2016-03-10 12:00:00');


テーブルのレコードを確認する

下記コマンドでテーブルのレコードを確認できます。

//select {抽出するフィールド名} form {抽出対象となるテーブル}

mysql> select * from users;
+----+-------+-----------------+------+---------------------+
| id | name | email | sex | created |
+----+-------+-----------------+------+---------------------+
| 1 | taro | taro@gmail.com | male | 2016-03-10 12:00:00 |
| 2 | taro1 | taro1@gmail.com | male | 2016-03-10 12:00:00 |
| 3 | taro2 | taro2@gmail.com | male | 2016-03-10 12:00:00 |
| 4 | taro3 | taro3@gmail.com | male | 2016-03-10 12:00:00 |
+----+-------+-----------------+------+---------------------+

コマンドの意味としてはこんな感じ

 select(抽出する) * (すべてのフィールド)from users(users テーブルから)


特定のフィールドを抽出するには

mysql> select id,name from users;

+----+-------+
| id | name |
+----+-------+
| 1 | taro |
| 2 | taro1 |
| 3 | taro2 |
| 4 | taro3 |
+----+-------+


複雑なテーブルに中身が見づらい場合に、レコードを1列ごとに表示するには

mysql> select * from users \G

*************************** 1. row ***************************
id: 1
name: taro
email: taro@gmail.com
sex: male
created: 2016-03-10 12:00:00
*************************** 2. row ***************************
id: 2
name: taro1
email: taro1@gmail.com
sex: male
created: 2016-03-10 12:00:00
*************************** 3. row ***************************
id: 3
name: taro2
email: taro2@gmail.com
sex: male
created: 2016-03-10 12:00:00
*************************** 4. row ***************************
id: 4
name: taro3
email: taro3@gmail.com
sex: male
created: 2016-03-10 12:00:00
4 rows in set (0.00 sec)


レコードの抽出条件を指定する

selectを使ってレコードを抽出する際に、全てのレコード取得せず、

条件を指定して抽出するにはwhereを使用します。

select * form users where {抽出条件};

抽出するテーブルは下記とします。

mysql> select * from users;

+----+---------+-------------------+--------+---------------------+
| id | name | email | sex | created |
+----+---------+-------------------+--------+---------------------+
| 1 | taro1 | taro1@gmail.com | male | 2016-03-10 12:00:00 |
| 2 | hanaco1 | hanaco1@yahoo.com | female | 2016-03-10 12:00:00 |
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
| 4 | hanaco2 | hanaco2@gmail.com | female | 2016-03-10 12:00:00 |
+----+---------+-------------------+--------+---------------------+

例)テーブルのからsexがmaleのものだけ抽出する

mysql> select * from users where sex = 'male';

+----+-------+-----------------+------+---------------------+
| id | name | email | sex | created |
+----+-------+-----------------+------+---------------------+
| 1 | taro1 | taro1@gmail.com | male | 2016-03-10 12:00:00 |
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
+----+-------+-----------------+------+---------------------+

例)テーブルのからidが3以上のものだけ抽出する

mysql> select * from users where id  >= 3;

+----+---------+-------------------+--------+---------------------+
| id | name | email | sex | created |
+----+---------+-------------------+--------+---------------------+
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
| 4 | hanaco2 | hanaco2@gmail.com | female | 2016-03-10 12:00:00 |
+----+---------+-------------------+--------+---------------------+

例)テーブルのからsexがmaleで且つ、idが3以上のものだけ抽出

mysql> select * from users where sex = 'male' &&  id  >= 3;

//&&じゃなくてandのほうがいいのかな・・・

+----+-------+-----------------+------+---------------------+
| id | name | email | sex | created |
+----+-------+-----------------+------+---------------------+
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
+----+-------+-----------------+------+---------------------+

検索条件の設定の仕方はJSとそんなにかわらないので、分かりやすかったです。

他にも、範囲を指定して抽出するbitweennot bitweenや、指定したリストの中のいずれかの値に等しいかで判定し抽出するinnot inなど他にも便利なものがあります。


between

mysql> select * from users where id between 1 and 3;

+----+---------+-------------------+--------+---------------------+
| id | name | email | sex | created |
+----+---------+-------------------+--------+---------------------+
| 1 | taro1 | taro1@gmail.com | male | 2016-03-10 12:00:00 |
| 2 | hanaco1 | hanaco1@yahoo.com | female | 2016-03-10 12:00:00 |
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
+----+---------+-------------------+--------+---------------------+


in

mysql> select * from users where name in ('taro1','taro2'); +----+-------+-----------------+------+---------------------+

| id | name | email | sex | created |
+----+-------+-----------------+------+---------------------+
| 1 | taro1 | taro1@gmail.com | male | 2016-03-10 12:00:00 |
| 3 | taro2 | taro2@yahoo.com | male | 2016-03-10 12:00:00 |
+----+-------+-----------------+------+---------------------+


終わり

次は、レコードを更新したりしてみようと思います。