3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MySQLをうす〜く使ってみる

Posted at

概要

データベースを使ってみたいという安直な理由でMySQLを触ってみます.

本当に1ミリも知識がない(←ここ重要)&環境もないため,installからデータベース操作まで,もがきながらやってみます.
(とにかく使ってみたいというだけなので,細かいところは全無視でよく分かっていなくても進めています)

本記事はその備忘録として作成します.

image.png

イルカが可愛かったので載せておきます

1. MySQLのInstallと初期設定

MySQLのinstall
brew install mysql

遅くなりましたが,筆者はmacユーザーなのでmac OSでの環境構築になります.

MySQLのversion確認
mysql --version
-> mysql  Ver 8.0.27 for macos11.6 on x86_64 (Homebrew)

次のコマンドを実行すると,MySQLを起動することができます.

MySQLの起動(いずれか1つでOK)
brew services start mysql
mysql.server start

止めたい時は,次のコマンドを実行しましょう!

MySQLの停止
brew services stop mysql 

初回は,mysql_secure_installationでパスワードを設定する必要があります.割と強固なものにした方が良さそうです(ポリシー的に)
セキュリティについて色々聞かれますが,基本「yes」で大丈夫だと思います.

MySQLの初期設定(初回install時のみ)
mysql_secure_installation

次のコマンドを実行してログインしてみましょう!

MySQLへのログイン
mysql --user=root --password

ログインが成功したら,MySQLを使う準備はバッチリです!
次の章から実際に中身を覗いてみましょう!

2. MySQLを使ってみる

MySQLの主なコマンドから確認していきます.
最初はshow databasesです.
データベースを一覧表示するためのコマンドです.

何か色々表示されていますが,よく分からないので今回はパスです.

データベースの一覧表示
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

続いてはCREATE DATABASEです.
新しくデータベースを作成したい時に使います.
実行してみると,新しく追加されていることが分かります!

データベースの新規作成
mysql> CREATE DATABASE db_sample;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db_sample          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

一覧表示した中からデータベースを選択したい場合にはuse db_sampleのように実行します.
また,データベース中のテーブルを表示したい場合にはshow tablesを実行しましょう.
現在は作成してから何もいじっていないのでEmpty setになっていますね.

データベースの変更とテーブル表示
mysql> use db_sample;
Database changed
mysql> show tables;
Empty set (0.00 sec)

続いてはお馴染みCREATE TABLE文です.
あるデータベース中で新しくテーブルを作成したいときに実行します.
今回はidとnameという2つのカラムを用意します.idはkeyであり,auto_incrementを引数に加えることで,データを追加する度に+1される設定にしています(初期値は1).nameは文字列ならオッケーとしています.

CREATETABLE文
mysql> CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));
Query OK, 0 rows affected (0.03 sec)

作成したテーブルについて詳細に知りたい時にはDESCRIBE文を使います.
keyが何か,default値は何か,typeの指定は何かを一眼で把握することができます.

DESCRBE文
mysql> DESCRIBE users;
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra          |
+-------+------+------+-----+---------+----------------+
| id    | int  | NO   | PRI | NULL    | auto_increment |
| name  | text | YES  |     | NULL    |                |
+-------+------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

続いてはINSERT INTO文です.新しくデータを追加したい時に使います.
今回はnameにtestという値を持ったuserを追加してみます.
おまけに結果の抽出も行ってみましょう.テーブルからデータを取り出したい時にはSELECT文を実行します.
SELECT文は奥が深いので詳細については省きます...

INSERT文とSELECT文
mysql> INSERT INTO users(name) VALUES ('test');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM users;
+----+------+
| id | name |
+----+------+
|  1 | test |
+----+------+
1 row in set (0.00 sec)

3. 権限関係

本章では,MySQLのセキュリティポリシーや権限関係について見ていこうと思います.

MySQLでは,非常に厳しいセキュリティポリシーが設定されており,パスワードの要求水準が極めて高いです(長いパスワードを設定して入れなくなりがち).
趣味で使う分にはそこまで高いセキュリティ基準にしなくても良くない?ということで今回は設定を変えて行こうと思います.
まずは,初期の設定がどんなものかSHOW variables like 'validate_password%'を実行してみましょう!

passwordのvalidation
mysql> SHOW variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | X      |
| validate_password.dictionary_file    |        |
| validate_password.length             | X      |
| validate_password.mixed_case_count   | X      |
| validate_password.number_count       | X      |
| validate_password.policy             | X      |
| validate_password.special_char_count | X      |
+--------------------------------------+--------+
7 rows in set (0.02 sec)

上記でかなりタイトな設定になっていることが分かったので,自分なりの設定に変えてみましょう.変更したい時はset global XXXを実行します.
変更後もう一度SHOW variablesを実行すると,修正されていることが分かります.

global変数の変更
mysql> set global validate_password.length={hoge};
mysql> set global validate_password.policy={hoge};
Query OK, 0 rows affected (0.00 sec)

続いては権限関係を見ていきます.
CREATE USER文を実行すると,新規のユーザーを作成することができます.

CREATEUSER文
mysql> CREATE USER 'hoge@localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

続いてGRANT文を見ていきます.このコマンドは権限を委譲する際に使われるもので,ユーザーごとにアクセスできるデータベース,機能を制限することができます.非常に細かく設定することができ,意図しないユーザーが意図しない操作を行えない仕組みがなされています.
今回はあるユーザーにあるデータベースに関する全権限を付与してみます.

GRANT文
mysql> grant all on sample_db.* to hoge@localhost;
Query OK, 0 rows affected (0.01 sec)

あるユーザーに与えられた権限の一覧を見たい時にはSHOW GRANTSを実行します.
先ほど全権限が付与されたので,ALL PRIVILEGESとなっていることが分かります.

あるユーザーへの権限一覧
mysql> show grants for hoge@localhost;
+--------------------------------------------------------------------+
| Grants for hoge@localhost                                          |
+--------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `sample_db`.* TO `hoge`@`localhost`        |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

今回はここまで.

本当に浅く触っただけでしたが,データベースの仕組みを完璧に理解できました(できていない)
次回以降は実際にwebアプリに組み込んだりと,何かしら形にできたらいいなあと考えています.

参考文献等

本記事を作成するに当たって,以下のサイトを参考にしました.

  1. MySQL公式ドキュメント
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?