MySQLの導入基礎

本記事では、MySQLの基礎コマンドをXAMPP環境で検証したものを、
備忘録として記録しています。

- MySQL環境構築
- テーブル操作
- 基礎コマンド

#検証環境
OS: Windows 10 Home
XAMPP Ver: Windwos向けXAMPP 7.4.6
MariaDB Ver: 10.4.11

公式マニュアル
> 引用元: [MySQL(英語版)](https://dev.mysql.com/doc/refman/8.0/en/)
> 引用元: [MySQL(日本語版)](https://dev.mysql.com/doc/refman/5.6/ja/)

# 準備編
1.XAMPPのインストール
2.MySQLの起動
3.ディレクトリの移動

##### XAMPPのインストール、およびMySQLの起動
XAMPPをインストールするには、以下の記事が参考になります。
また、XAMPP Control PanelからMySQLを起動する方法も記載されています。
> 引用元：[今さら聞けない！XAMPPをインストールする方法【超初心者向け】](https://techacademy.jp/magazine/1722)

##### ディレクトリの移動
- コマンドプロンプトを起動する
- 以下のコマンドを入力し、`Enter`キーで実行する

```
cd C:¥xampp¥mysql¥bin
```

プロンプトの表記が、`C:¥xampp¥mysql¥bin>`に変更されればOK。
ここまでで、【準備編】が完了。

#MySQLサーバーへ接続
デフォルトで、MySQLの`root`ユーザーがパスワードなしで設定されているので、
以下のコマンドで接続する。

```
mysql -u root
```

プロンプトが`MariaDB [(none)]>`に切り替われば、OKです。
ちなみに、以下のコマンドも同様の結果が確認できます。

```
mysql -u root -h localhost
```

つまり、`-h localhost`は省略可能で、
`-h`オプションを省略した場合、`localhost`からMySQLサーバーへアクセスすることとなります。

# バージョン確認方法
##### 1.MySQLへの接続時

```
mysql -u root
```
上記コマンド実行後、`Server Version:`が表示されます。

##### 2.MySQLへ接続後

```
status;
```

上記コマンド。もしくは、以下のコマンドでも確認できます。

```
select version();
```

##### 3.MySQLサーバー接続前

```
mysql --version
```

そのほか、phpMyAdminからも確認できますが、本記事では割愛します。
> 引用元：[【MySQL入門】バージョン確認をする方法を紹介！ツール利用にも対応]
(https://www.sejuku.net/blog/82533)

# 基礎コマンド
ここでは、SQLの基本コマンドを確認します。

プロンプトが`MariDB[(none)]`となり、MySQLへ接続できていることを確認してください。

##### 現在のユーザーを確認する

```
select user();
```

##### データベース一覧を確認する

```
show databases;
```

##### データベースを作成する

```
create database dababase名;
```

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

```
drop database database名;
```

##### 現在の操作対象データベースを確認する

```
select database();
```

##### 操作するデータベースを選択する

```
use database名;
```

##### 作業用ユーザーを作成する
user名: dbuser
password: Pass

```
create user dbuser@localhost identified by 'Pass';
```

##### 作業用ユーザーに対して、操作対象DB全ての操作権限を与える
database名: myproject

```
grant all on myproject.* to dbuser@localhost;
```
docker コンテナの場合、
```
grant all on `myproject`.* to dbuser@'%';
```

##### 作業用ユーザーの作成と、操作対象DBの操作権限を同時に行う
database名: myproject
user名: dbuser
password: Pass

```
grant all on myproject.* to dbuser@localhost identified by 'Pass';
```

##### 作成した作業用ユーザーで、データベースにアクセスする

database名: myproject
user名: dbuser
password: Pass
MySQLからは、`¥q`もしくは`quit`で抜けておく。

```
mysql -u dbuser [-h localhost] -p myproject
Enter Password:
```

※[]内は省略可。

##### 作業用ユーザーを削除する
事前に`mysql -u root`コマンドでルートユーザーで接続しておく。

```
drop user dbuser@localhost;
```

##### テーブル一覧を確認する
事前に`use database名`コマンドでデータベースを選択しておく。

```
show tables;
```

##### テーブルの構造を確認する

```
desc table名;
```
または、
```
show columns from table名;
```

##### テーブルを削除する

```
drop table table名;
```

ここまでで、SQLの基礎コマンドは完了です。

# 外部ファイルを使用する方法
##### 事前準備
`C:¥xampp¥mysql¥bin`ディレクトリに`database`ディレクトリを作成する。
この`C:¥xampp¥mysql¥bin¥database`ディレクトリ内にファイルを作成していくものとする。

##### 実行方法
- 方法1: リダイレクション

```
mysql -u root < file_path
```
実行例:

```
cd C:¥xampp¥mysql¥bin
mysql -u root < ./database/create_myproject.sql
```

- 方法2: `source`コマンド

```
source file_path
```

実行例:

```
cd C:¥xampp¥mysql¥bin
mysql -u root
Enter Password:

source ./database/create_myproject.sql
```

`source`のコマンドは、`¥.`(バックスラッシュ + ピリオド)でも代用可能です。

# データベースと作業用ユーザーを作成する【外部ファイル】
##### SQLファイルの作成
ファイル名: create_myproject.sql
データベース名: myproject
ユーザー名: dbuser
パスワード: Pass

```sql:create_myproject.sql
drop database if exists myproject;
create database myproject;
grant all on myproject.* to dbuser@localhost identified by 'Pass';
```

##### 作成したファイルを実行する

```
cd C:¥xampp¥mysql¥bin
mysql -u root
¥. ./database/create_myproject.sql
```

##### 実行後、作成したデータベースに、作成した作業用ユーザーで接続する

```
cd C:¥xampp¥mysql¥bin
mysql -u dbuser -p myproject
Enter Password:
```

# テーブルを作成する【外部ファイル】
##### SQLファイルの作成
ファイル名: myproject.sql
テーブル名: users

```sql:myproject.sql
drop table if exists users;
create table users (
  id int unsigned primary key auto_increment,
  name varchar(255),
  point float
);
```

##### 作成したファイルを実行する

```
¥. ./database/myproject.sql
```

実行後、作成したテーブルができているか、テーブル構造が意図した通りか確認する

```
show tables;
desc users;
```

# テーブルの構造を変更する
##### 特定のフィールドの後に、新たなフィールドを追加する
追加するフィールド: email

```sql:myproject.sql
alter table users add column email varchar(255) after name;
```

##### フィールドを削除する

```sql:myproject.sql
alter table users drop column email;
```

##### フィールド名の変更、フィールドのデータ型の変更

```sql:myproject.sql
alter table users modify name varchar(20); -- データ型のみ変更
alter table users change name user_name varchar(80); -- データ型、フィールド名変更
```

##### テーブル名の変更

```sql:myproject.sql
alter table users rename members;
```

# テーブル操作の基本
##### レコードの抽出

```sql:myproject.sql
select * from users where id > 1;
select name, point from users;
select * from users where id in (1. 3);
select * from users where point between 2.0 and 6.0;
select * from users where name like '%a%'; -- %はワイルドカード
select * from users where name like binary 'S%'; -- binaryは厳密に大文字のSから開始される

```
##### レコードの挿入、更新、削除

```sql:myproject.sql
insert into users (name, point) values ('sato', 4.9);
update users set point = point * 1.2 where id % 2 = 0; -- idが偶数のuser
delete from users where id < 5;
```

##### 抽出したレコードの並び替え、件数制限、関数の利用

```sql:myproject.sql
select * from users order by point;
select * from users order by point desc limit 3; -- point上位3人(組み合わせ)
select * from users order by rand() limit 1; -- 乱数で並び替える
select name, length(name) users order by length(name) desc; -- nameフィールドの文字数が大きい順に並び替える
```

以上、随時加筆修正します。