データベース MySQLメモ

##環境

使用PC: Mac

開発環境: AWS Cloud9 (MySQLは最初から導入されているみたい)

MySQLバージョン: 5.7.34

###Cloud9以外でのMySQLインストール方法
[MacでMysql のインストール](https://qiita.com/Uenrio/items/3ab47286179c90530a44) 

##そもそもデータベースとは
* データを保存するためのソフトウェアのこと
* データベースを操作する言語は SQL を使う

##MySQLについて
リレーショナルデータベースの１つで、構造としては１つのアプリケーションに対して

1つのデータベースがあり、１つのデータベースの中に複数のテーブルがある。

リレーショナルデータベースには３つの特徴がある
* テーブルは、カラム（縦）とレコード（横）で構成される
* カラムに、保存するデータの制約を設定できる
* データの保存や取得には、SQLという言語を使用する

##データベースの役割

データベースは、PHPなどのプログラムから必要なデータ操作（CRUD）を要求され、それに応えてデータ操作をする。これがアプリケーションにおけるデータベースの役割。

##SQLとは

SQLはRDBMSのデータ操作や定義を行うための言語

###SQLの役割

* データ操作のSQL
* データ定義のSQL
* データ制御のSQL

###データ操作のSQL

| データ操作のSQLキーワード | CRUD | 用途 |
|:-:|:-:|:-:|
| INSERT | Create  | 作成・保存  |
| SELECT | Read  |  取得 |
| UPDATE  | Update  | 更新|
| DELETE  | Delete  |  削除 |



###データ定義のSQL

|データ定義のSQLキーワード|用途|
|:-:  |:-:  |
| CREATE  | 新しいデータベース、テーブルを作成する  |
|  DROP |すでに存在するデータベースや、テーブルを削除する  |

###データ制御のSQL

アカウントにおけるデータのアクセス制御に使用する

##データベースサーバの起動と停止

###起動

MySQLサーバが起動する

```:ターミナル
sudo service mysql start
```
###起動状態確認

```:ターミナル
sudo service mysql status
```

###停止

```:ターミナル
sudo service mysql stop
```

##データベースサーバへの接続

MySQLサーバ起動後、下記コマンド入力

```:ターミナル
sudo mysql -u root
```

rootというユーザ(-uのこと？)で、MySQLサーバに接続する

###接続解除
```:ターミナル
mysql> exit
```

##データベースの作成

```:ターミナル
sudo mysql -u root //データベースサーバに接続

mysql>　CREATE DATABASE データベース名; 

//;SQL分の最後は;セミコロン! 小文字英数字と_だけ使う。大文字は避ける。
```

###データベース一覧の確認

```:ターミナル
mysql> show databases;
```

###データベースを削除

```:ターミナル
mysql> DROP DATABASE データベース名;

// 削除の確認なしで削除が実行されるから注意！！
```

##テーブルの作成

Cloud9のワークスペースにSQLファイル

create_table_データベース名_テーブル名(複数形！).sql　作成

```:create_table_データベース名_テーブル名.sql

CREATE TABLE テーブル名 (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(100),
    price INT,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

// 基本のデータ型
- INT（整数）
- DOUBLE（小数）
- VARCHAR（可変長の文字列）
- TEXT（文章用の長い文字列）
- TIMESTAMP（日付時刻型）
```

個人的に使いそうなデータ型は別の投稿に載せる予定！

###上記のテーブル作成で使われている単語のメモ書き

* AUTO_INCREMENT: 1から始まって自動的に１ずつ増える設定
* NOT NULL: 空データでは許さない設定
* PRIMARY KEY: プライマリーキー、主キー、テーブルに1つは必須
* (100): 文字数の最大値
* price INT: priceカラムをINT(整数)で保存

##SQLファイルを実行する

操作するデータベースを選択するのを忘れるのでメモ...

```:ターミナル
mysql> USE データベース名;

mysql> source ~/environment/create_table_データベース名_テーブル名.sql;
```


###テーブルができているか確認

```:ターミナル
mysql> USE データベース名;

mysql> show tables;
```

###テーブルの中身を確認

```:ターミナル
mysql> describe テーブル名;
```
表がターミナル上に表示される
testsテーブルの中身
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1761711/e222bc51-8976-3103-63d3-3cb0f93d5303.png)

###テーブルの削除
確認なしで削除されるから注意！

```:ターミナル
mysql> DROP TABLE books;
````
##テーブルデータの操作(CRUD)

テーブルの中にレコード（データ列）を保存し、操作するやり方

###データの作成・保存

```:ターミナル
//例文
mysql> INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);

//実際に入れてみる
mysql> INSERT INTO テーブル名 (title, price) VALUES ("testMySQL", 10);
```

###データの取得
```:ターミナル
//例文
mysql> SELECT カラム名 FROM テーブル名;

//実際に入れてみる
mysql> SELECT * FROM テーブル名; 

// *: テーブルの全てのカラムを取得できる
```

###データの更新
```:ターミナル
//例文
mysql> UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ...

//実際に入れてみる
mysql> UPDATE テーブル名 SET price = 100;
```

###データ(レコード)の削除
```:ターミナル
//例文
mysql> DELETE FROM テーブル名

//実際に入れてみる
mysql> DELETE FROM テーブル名
```

##まとめ
MySQLの基本をここにまとめることができたから、

次は応用として、自分で考えたテーブルを色々試したものを

Qiitaにあげてみようと思う。

##できたらここにリンクを貼る


以上