MySQLのメモです。
こちらのサイトを参考にしました。
まずはサーバーに接続します。
mysql -u root -p
パスワードを入力すると接続完了です。
ログアウトして接続をやめる場合はexit
かquit
と入力して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
が削除されました。
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 * 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)
mysql> select name from singer
-> where sex = 'female';
+--------------+
| name |
+--------------+
| 柴田聡子 |
| カネコアヤノ |
+--------------+
2 rows in set (0.01 sec)
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は文字列よりも日付型で管理した方がよさそうです。
change
かmodify
を使用します。
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)
元の状態に戻せました。
改めて追加しましょう。
データを更新する際は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;