MySQLのメモ

# これは何？
MySQLを使うときのメモです。

# mysqlコマンドで接続できない
```bash
$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

そんなときは↓

```bash
$ mysql.server restart
```

# ローカルファイル内のSQLを実行する

```bash
$ mysql -u root
mysql> source ~/hoge/hoge/hogege.sql
```

# ユーザと権限関連
## ユーザ表示
```bash
mysql > SELECT host, user FROM mysql.user;
```

## ユーザ追加

```bash
mysql > CREATE USER '${USER_NAME}'@'localhost';
```

## ユーザ削除

```bash
mysql > DROP USER ${USER_NAME};
```

## 権限の表示
(例↓は`localhost`に対する権限を表示)

```bash
mysql > SHOW GRANTS FOR '${USER_NAME}'@'localhost';
```

## 権限追加

```bash
mysql > GRANT SELECT, UPDATE ON ${DB_NAME}.* TO '${USER_NAME}'@'localhost';
mysql > GRANT CREATE VIEW ON ${DB_NAME}.* TO '${USER_NAME}'@'localhost';
```

## 権限全部許可追加
```sql
mysql> GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${USER_NAME}'@`localhost`;
```

## 権限を初期状態に戻す
```bash
mysql > REVOKE ALL ON *.* FROM '${DB_NAME}'@'localhost';
```

# データ、定義のエクスポート関連
## Schemaだけ出力する
```bash
$ mysqldump -u ${USER_NAME} --no-data ${DB_NAME} > ${OUTPUT_FILE_NAME}
```
## テーブルを指定して出力
```bash
$ mysqldump -u ${USER_NAME} -p -h ${HOST_NAME} ${DB_NAME} ${TABLE_NAME} > ${OUTPUT_FILE_NAME}
```


## 全部出力
```bash
$ mysqldump  --no-tablespaces -u ${USER_NAME} -p -h ${HOST_NAME} ${DB_NAME} > ${OUTPUT_FILE_NAME}
```

### Work Around (a) 
```bash
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
```
の場合は以下を追加。
```sql
--no-tablespaces
```

### Work Around (b) 
```bash
mysqldump: Got error: 1356: View 'db_name.table_name' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them when using LOCK TABLES
```
の場合は以下を追加。
```sql
--single-transaction
```

### Work Around (c)
```bash
ERROR 1227 (42000) at line 3189: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation
``` 
の場合は以下を追加。
```sql
--set-gtid-purged=OFF
```
GTIDに関する操作をdump内に含まないようにするオプション。

# テーブル操作関連
## テーブルの詳細表示(簡易)
```sql
mysql > DESC [column_name]
```

## テーブルの詳細表示（全て）
```sql
mysql > SHOW FULL columns FROM [table_name]; 
```


## カラム追加
```sql
mysql > ALTER TABLE [table_name] ADD [column_name] [constraint: TINYINT NOT NULL DEFAULT '1'];
```

## カラム順番入れ替え
!!! 制約なども更新されるので、以前と同様の制約をいれること !!!

```sql
mysql > ALTER TABLE [table_name] MODIFY [column_name_to_move] [constraint: TINYINT NOT NULL DEFAULT '1'] COMMENT [comment] AFTER [column_name_of_to_move_after];
```

## カラム削除
```sql
mysql >  ALTER TABLE [table_name] DROP COLUMN [column_name];
```

## ファイルから読み込み＆ファイルへの出力
```bash
$ mysql [table name] < textfile.txt > outputfile.txt 
```

## パラメータのセット
```sql
SET @TARGET_ID = 123;
SELECT * FROM target WHERE id = @TARGET_ID;
```


# Reference
- [mysqlのバイナリログの設定とバイナリログを見るコマンドメモ | Bamboo lath 日々の記録](https://www.mogumagu.com/wp/wordpress/archives/1048)

- [Homebrewで入れたMySQLのmy-xxx.cnfの場所とmy.cnfの設置 - Qiita](https://qiita.com/madai0517/items/4df3ac0ce002301c7059)
- [MySQLデータ型一覧 (詳細) - Miuran Business Systems](http://site.m-bsys.com/knowledge/mysql-detatype-kwsk)
- [mysqldumpまとめ - Qiita](https://qiita.com/PlanetMeron/items/3a41e14607a65bc9b60c)
- [MySQLでデータをエクスポートする - Qiita](https://qiita.com/katsukii/items/c7709fc501c1eb11603f)
- [MySQLユーザ作成について - Qiita](https://qiita.com/gatapon/items/92b942fa7081cfe17482)
- [[MySQL]権限の確認と付与 - Qiita](https://qiita.com/shuntaro_tamura/items/2fb114b8c5d1384648aa)