MySQLのコマンドのまとめ

参照サイト
https://code-macchiato.com/post/how-to-reset-mysql8-root-password-on-ubuntu
https://mebee.info/2020/08/17/post-16820/
https://qiita.com/yulily@github/items/54cb6ccaacf39977455c
http://download.nust.na/pub6/mysql/doc/refman/5.1-olh/ja/mysql-command-options.html
https://www.javadrive.jp/mysql/user/index11.html#section1
https://dev.mysql.com/doc/refman/8.0/ja/grant.html#grant-database-privileges
http://mysql.javarou.com/dat/000834.html
https://hodalog.com/mysql-secure-file-priv-error/
https://dev.mysql.com/doc/refman/8.0/ja/rename-table.html


# ログイン
```terminal:terminal
sudo mysql -u root;
sudo mysql -u user -p;
sudo mysql -u user -D database -h localhost -p;
```

# ユーザーアカウント
## ユーザーアカウントを作成する
```sql:sql
CREATE USER 'user'@'localhost' IDENTIFIED BY '1';
CREATE USER 'user'@'192.168.0.1' IDENTIFIED BY '1';
CREATE USER 'user'@'%' IDENTIFIED BY '1';

CREATE USER  
  'user01'@'%' IDENTIFIED BY '1',
  'user02'@'%' IDENTIFIED BY '1',
  'user03'@'%' IDENTIFIED BY '1',
  'user04'@'%' IDENTIFIED BY '1',
  'user05'@'%' IDENTIFIED BY '1',
  'user06'@'%' IDENTIFIED BY '1',
  'user07'@'%' IDENTIFIED BY '1',
  'user08'@'%' IDENTIFIED BY '1',
  'user09'@'%' IDENTIFIED BY '1',
  'user10'@'%' IDENTIFIED BY '1'
;
```


## パスワードを変更する
```sql:sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '1';
```

## 権限を付与する
```sql:sql
GRANT ALL ON DB1.* TO 'user'@'localhost';

GRANT ALL 
ON *.* 
TO 
  'user01'@'%',
  'user02'@'%',
  'user03'@'%'
;

GRANT SELECT, UPDATE  
ON *.* 
TO 
  'user04'@'%',
  'user05'@'%',
  'user06'@'%'
;

GRANT SELECT  
ON *.* 
TO 
  'user07'@'%',
  'user08'@'%',
  'user09'@'%',
  'user10'@'%'
;
```


## 登録済みアカウントを確認する
```sql:sql
SELECT user, host FROM mysql.user;
```

## 権限を確認する
```sql:sql
SHOW GRANTS FOR 'user01'@'%';
```

## ユーザーアカウントを削除する
```sql:sql
DROP USER 'user'@'localhost';
DROP USER 'user'@'192.168.0.1';
DROP USER 'user'@'%';
DROP USER 'user'@'localhost','user01'@'192.168.0.1','user02'@'%';

DROP USER  
  'user01'@'%',
  'user02'@'%',
  'user03'@'%',
  'user04'@'%',
  'user05'@'%',
  'user06'@'%',
  'user07'@'%',
  'user08'@'%',
  'user09'@'%',
  'user10'@'%' 
;
```



# データベース
## データベースを確認
```sql:sql
SHOW DATABASES;
```



# テーブル
## テーブルを確認
```sql:sql
SHOW TABLES;
```

## テーブルのデータ構造を確認
```sql:sql
DESC table;
```

## テーブル名を変更
```sql:sql
RENAME TABLE tableNow TO tableNew
```


# クエリ
## クエリを登録
```sql:sql
CREATE TABLE query
    SELECT * FROM table;
```



# データインポート
## サーバー設定
```sql:sql
SET PERSIST local_infile=1;
```

## クライアント設定(ログイン)
```terminal:terminal
sudo mysql -u user -D database -h localhost -p --enable-local-infile;
```

## インポート実行
```sql:sql
LOAD DATA LOCAL 
INFILE 'import.csv'
INTO TABLE
database.table
FIELDS
TERMINATED BY ','
LINES TERMINATED BY '\n'
;
```

# データエクスポート
## 設定確認
```sql:sql
SHOW VARIABLES LIKE "secure_file_priv";
```
- 指定のディレクトリにのみファイル出力できる

## エクスポート
```sql:sql
SELECT * FROM table INTO OUTFILE '/var/lib/mysql-files/export.txt';
```




# ストアドプロシージャ
## ストアドプロシージャを作成
```sql:sql
DELIMITER //

-- プロシージャ定義
CREATE PROCEDURE procedure()
BEGIN
    DECLARE var1 INT(10);
    DECLARE var2 VARCHAR(10);

    DECLARE flg INT DEFAULT FALSE;

    -- カーソルを定義
    DECLARE cursor1 CURSOR FOR
        SELECT * 
        FROM table;
    
    -- カーソルが末尾に達したときのflgをTrueに変える  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET flg = TRUE;

    -- 宣言終了 --

    -- 既存データを削除
    DELETE FROM `table`;

    -- カーソルをオープン
    OPEN cursor1;
  
    -- ループで1行ずつ処理
    read_loop: LOOP
        --1行ずつ読み出し、変数へ格納
        FETCH cursor1 INTO var1,var2;

        -- カーソルが末尾達していればループを抜ける
        IF flg THEN
            LEAVE read_loop;
        END IF;

        -- 別テーブルにデータ挿入 
        INSERT INTO `table2` VALUES (var1, var2);
    END LOOP;
  
    -- カーソルを閉じる
    CLOSE cursor1;


END//

DELIMITER ;
```
- テーブルから既存のデータを削除をカーソルの宣言の前に置いたらエラーになった。DECLAREは処理が始まったあとにあるとエラーになる。


## ストアドプロシージャを確認
```sql:sql
SELECT
    ROUTINE_SCHEMA, /* ストアドプロシージャがあるデータベース */
    ROUTINE_NAME,   /* ストアドプロシージャの名前 */
    ROUTINE_TYPE    /* プロシージャとファンクションのどちらかを示す */
FROM
    information_schema.ROUTINES
WHERE 
    ROUTINE_TYPE = 'PROCEDURE'; /* プロシージャのみ抽出 */
;
```

## ストアドプロシージャを削除
```sql:sql
DROP PROCEDURE procedure;
```