XAMPP for Linux　DATABASE作成

# 記事の内容
[Linux版XAMPP](https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/)にてPHPMyAdminではなく端末からDB作成、DBのユーザー作成、[A5:SQL Mk-2](https://a5m2.mmatsubara.com/)で参照するまでの手順

# 今回使用したXamppのバージョン
xampp-linux-x64-8.1.10-0-installer.run

# 本文
## 1. MySQL起動
XAMPPの管理コンソールからMySQLを起動させる。
以下のようにRunningになっていればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/7268ba2f-f939-76ca-9793-f1bd9e126dc0.png)


## 2. 端末からMySQLにログイン

MySQL(実体はMariaDBだが以降はMySQLと呼ぶ)の実行ファイルは以下添付画像の通り`/opt/lampp/bin/mysql`に配置されているため
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/7c4d9cf3-a517-3fc3-681b-40ffe7e617e9.png)

以下のコマンドでMySQLにログインすることが出来る。

```shell
/opt/lampp/bin/mysql -u root -p

# もし駄目なら管理者権限で実行でもOK
sudo /opt/lampp/bin/mysql -u root -p

# 更にちゃんとHOST指定したい場合は以下
sudo /opt/lampp/bin/mysql -u root -p -h localhost
```
Enter後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/42bdf069-d1de-f3d2-87b6-00fb3e133b9c.png)
パスワード入力町状態になるが初期状態ではrootのパスワードは空なのでそのままエンターでOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/e865e4d6-411d-dcfc-ba57-b4460d133933.png)

## 3. DB作成
```shell
CREATE DATABASE データベース名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

:::note info
DB作成時のオプションについての補足
:::
<details>
    <summary>CHARACTER SET（キャラクタセット）</summary>
    
    ・utf8：　3バイトまでのUnicode文字をサポート（MySQLではよく使われる）
    ・utf8mb4：　4バイトのUnicode文字もサポート（絵文字など）
    ・latin1：　西欧言語向けの文字セット
</details>
<details>    
    <summary>COLLATE（照合順序）</summary>
    
    ・大文字と小文字を区別しない場合：　COLLATE utf8mb4_general_ci
    ・大文字と小文字を区別する場合：　COLLATE utf8mb4_bin
</details>   
COLLATE（照合順序）の具体例

```sql

CREATE TABLE users (
    username VARCHAR(255)
)

INSERT INTO users (username) VALUES ('Alice'), ('alice');

SELECT * FROM users WHERE username = 'Alice';  -- 結果: binなら'Alice' のみが返り、general_ciなら両方返ってくる
SELECT * FROM users WHERE username = 'alice';  -- 結果: binなら'alice' のみが返る、general_ciなら両方返ってくる
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/ef66a1c5-9a96-92fe-cc8e-34d8c6e7dcdd.png)

(個人的にはbinの方が厳密で良い気がするけどgeneral_ciの方がよく見かける理由は何故だろうか？)

## 4-1. 作成したDB専用ユーザーの作成(ユーザー作成のみ)
```shell
# 基本構文
CREATE USER 'username'@'hostname' IDENTIFIED BY 'example_password';

# ローカルホストから接続するユーザーの作成
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'example_password';

# どのホストからも接続できるユーザーの作成
CREATE USER 'example_user'@'%' IDENTIFIED BY 'example_password';

# ホストを特定のIPアドレスに制限する
CREATE USER 'example_user'@'192.168.1.100' IDENTIFIED BY 'example_password';
```

## 4-2. 作成したDB専用ユーザーの作成(権限付与)
```shell
# 基本構文
GRANT 権限リスト ON データベース名.テーブル名 TO 'ユーザー名'@'ホスト名';

# 特定のテーブルにSELECT権限のみ付与する場合
GRANT SELECT ON my_database.my_table TO 'example_user'@'localhost';

# 複数の権限を特定のテーブルに付与する場合
GRANT SELECT, INSERT, UPDATE ON my_database.my_table TO 'example_user'@'localhost';

# データベース内のすべてのテーブルに対し、SELECT, INSERT権限を付与する場合
GRANT SELECT, INSERT ON my_database.* TO 'example_user'@'localhost';

# データベース内の全てのテーブルに全ての権限を付与する場合
# すべての操作とはSELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER など
GRANT ALL PRIVILEGES ON my_database.* TO 'example_user'@'localhost';

# 付与後に権限を反映する
FLUSH PRIVILEGES;
```
## 5. ログアウトして作成したユーザーでログイン可能なことを確認
```shell
# MySQLにrootでログイン中の場合は以下
exit

# 作成したユーザーのユーザー名でログイン
/opt/lampp/bin/mysql -u user_name -p

# ログイン中のユーザー確認
SELECT USER();

# 作成したDBが見れるかどうかの確認
show databases;
```

## 6. A5:SQL Mk-2でDBの追加
:::note alert
LinuxOSの場合は通常A5:SQL MK-2は使用できませんが、作者の方が書いてくださっている以下記事の通り、wineを使用することで制限はあるそうですがLinuxでも使用することが出来ます。
[wine を使って Linux 上で A5:SQL Mk-2 を動作させる](https://a5m2.mmatsubara.com/tips/other_on_the_wine/)

※本記事では既にwine導入済みの前提
:::

DB接続情報
- データベース名：connect_test
- ユーザー名：connect_test_user
- パスワード：connect_test_password

以下ログ
```shell
$ /opt/lampp/bin/mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 28
Server version: 10.4.25-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE connect_test CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> CREATE USER 'connect_test_user'@'localhost' IDENTIFIED BY 'connect_test_password';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON connect_test.* TO 'connect_test_user'@'localhost';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
```

上記の情報でDBとユーザーを作成した場合の接続方法をキャプチャで添付しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/b25d9129-f541-089f-7547-c6aa6e4ea0f3.png)
左の白い領域で右クリック > Add or Delete Database ...をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/e8c5a88c-07ef-5a34-a8f4-afb39f6785df.png)
＋Add　をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/f078d89a-dd2d-7881-a22b-4e861e712a04.png)
MySQL/MariaDB (Direct connection)をクリック

接続情報入力用のモーダルが表示されるので「DB接続情報」に入力欄の情報を書き換えたらOKだが一応、初期表示時と変更後の状態をキャプチャで添付する。

初期表示時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/ff8800e3-a09e-61e5-28c8-62fa4153f80a.png)

変更後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/fab255fe-616a-a807-2923-ad7ba1a35548.png)

Connection Testをクリックして問題なければOKをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/406051f1-a8c5-dfb0-e749-f2ebd9821d80.png)
A5:SQL Mk-2内でDBに別名をつけれるので今回は`すぐ消す/sample/connect_test`でOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/bd451caa-ab2d-ee9f-c154-fea0eb9541de.png)
Closeをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/4f9b0de9-0477-6bb1-6649-f26e1da67d4e.png)
ちょっと端折ったけどこのように参照することが出来る。