中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【MySQL8.0】よく使うコマンド一覧と実際にSQLコマンドをたたく

1.DB操作

・DB作成

CREATE DATABASE 【DBの名前】;

・DB削除

DROP DATABASE 【DBの名前】;

・DB一覧の取得

SHOW DATABASES;


最初にやることはデータベースを作成することです。
まずは【test_db】というデータベースを作成します。

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.00 sec)

2.テーブル操作

テーブルを作成する場合は、どのデータベースを使用するか選択する必要があります。
また、特別なことがない限り特定のカラムに【PRIMARY KEY】を指定することになります。
【PRIMARY KEY】は指定しなくても動作しますが、指定しないという選択はほぼないと言っていいでしょう。

【PRIMARY KEY】を指定することで
・データの重複を防ぐ
・テーブルデータの検索が早くなる
というメリットがあります。

また【AUTO_INCREMENT】を設定することで
カラムに格納されている値に【1】をプラスした値が
自動で設定されます。
これは連続した値を格納する場合非常に便利です。

・データベース選択

USE 【DBの名前】;

・テーブルの作成

CREATE TABLE db_name.tbl_name(col_name1 data_type1  NOT NULL PRIMARY KEY AUTO_INCREMENT, col_name2 data_type2, ...);

・テーブルの削除

DROP TABLE 【テーブル名】

・テーブル一覧の取得

SHOW TABLES;

・カラム一覧の取得

SHOW COLUMNS FROM 【テーブル名】;


【test_db】に【user_auth】というテーブルを作成します。
カラム詳細は下記のとおりとします。

auth_id varchar(50) primary key
auth_pass varchar(50)
user_name varchar(50)
mysql> USE test_db;
Database changed

mysql> CREATE TABLE test_db.user_auth(auth_id varchar(50)  NOT NULL PRIMARY KEY, auth_pass varchar(50), user_name varchar(50));
Query OK, 0 rows affected (0.05 sec)

mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| user_auth         |
+-------------------+
1 row in set (0.00 sec)

mysql> SHOW COLUMNS FROM user_auth;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| auth_id   | varchar(50) | NO   | PRI | NULL    |       |
| auth_pass | varchar(50) | YES  |     | NULL    |       |
| user_name | varchar(50) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

3.カラムの操作

カラムの操作は基本的には仕様の変更があった時などに行います。
DB設計がしっかりしていて、仕様の変更がなければ基本的には使わないですが
そんなことはあり得ないので、覚えておく必要があります。

・カラムの名前変更

ALTER TABLE 【テーブル名】 RENAME COLUMN 【oldカラム名】 to 【newカラム名】;

・カラムの定義変更

ALTER TABLE 【テーブル名】 MODIFY COLUMN 【カラム名】 【new定義】;

・カラムの追加(最後に)

ALTER TABLE 【テーブル名】 ADD COLUMN 【追加カラム名】 【追加定義】;

・カラムの追加(指定カラムの後に)

ALTER TABLE 【テーブル名】 ADD COLUMN 【追加カラム名】 【追加定義】 AFTER 【指定カラム名】;

・カラムの削除

ALTER TABLE 【テーブル名】 DROP COLUMN 【削除カラム名】;

4.ユーザーの操作

データベースの操作をするユーザーにrootユーザーを使うのは好ましくありません。
特定の権限を持ったユーザーを作成し
このユーザーがデータベースの読み書きを行うのが一般的です。

・ユーザー一覧の取得

select User,Host from mysql.user;

・ユーザーを作成する

CREATE USER 【ユーザー名】@【接続元】 IDENTIFIED BY 【パスワード】;

・権限の変更

GRANT ALL ON 【データベース名】.* to 【ユーザー名】@【接続元】;

・ユーザーの削除

DROP USER 【ユーザー名】@【接続元】;


【localhost】から【test_db】にのみ接続可能なユーザーを作成します。

mysql> CREATE USER testuser@localhost IDENTIFIED BY 'hogehoge';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON test_db.* to testuser@localhost;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS for testuser@localhost;
+---------------------------------------------------------------+
| Grants for testuser@localhost                                 |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO `testuser`@`localhost`                  |
| GRANT ALL PRIVILEGES ON `test_db`.* TO `testuser`@`localhost` |
+---------------------------------------------------------------+
2 rows in set (0.00 sec)

5.データの操作

・データの追加

INSERT INTO 【テーブル名】 (col_name1, col_name2, ...) VALUES (value1, value2, ...);

・データの削除

DELETE FROM 【テーブル名】 WHERE 【指定カラム名】 = 【データ】;

・データの編集

UPDATE 【テーブル名】 SET 【編集カラム名】 = 【編集データ】 WHERE 【指定カラム名】 = 【データ】

・テーブルデータの取得

select * from 【テーブル名】


【user_auth】テーブルにデータを追加します。

mysql> INSERT INTO user_auth (auth_id, auth_pass, user_name) VALUES ('test', 'test', 'テスト');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM user_auth;
+---------+-----------+-----------+
| auth_id | auth_pass | user_name |
+---------+-----------+-----------+
| test    | test      | テスト    |
+---------+-----------+-----------+
1 row in set (0.00 sec)