🎀

MySQL入門

2023/02/10に公開
1

MySQL

Webアプリケーション開発でよく使われるデータベースシステム
オープンソースのリレーショナルデータベースマネジメントシステムと呼ばれるものの1つ
無料で利用することができる

近年ではMySQLから派生したMariaDBも使われるようになってきている

データベース(DB)

  • 検索や知蓄積が容易にできるよう整理された情報の集まり
  • 全てのシステムがデータを取り扱っていて、データをを取り扱う手段としてほぼ全てのシステムが何かしらの、データベースを使用している

ECサイトを例に考えると

  • ユーザー情報:山田太郎, yamada@example.com,090-0000-0000,東京都千代田区XXXX、。。。
  • 商品情報:’はじめてのJavaScript入門’,3,800,。。。
  • 売上情報:誰が、何を、いくらで、いくつかった、。。。

👉このようなデータを保存して扱うために、データベースを利用。

MySQLのサーバーの設定

Cloud9環境でMySQLを使えるようにする!
初期状態でもMySQLがダウンロードされているためバージョンを確認

mysql --version

👇
念の為MySQLサーバーが起動しているか確認

systemctl status mysql

active(running)と表示されていればOK

MySQLサーバーにログインして、データベースを操作するには

sudo mysql -u root

開発環境ということもあり、PWなしでログインできるようになっている

sudo = 管理者権限で実行
mysql = MySQLに関する操作を行う
-u = userを指定するオプション
root = ユーザー名(管理者ユーザーのことを指している)

👇
MySQLサーバーにログインできた

mysql>

と表示されている
ここでデータベースを操作する
👇
MySQLサーバーからログアウトするにはexitと入力

MySQLの環境設定

使用する文字コードを確認

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

latin1
latinアルファベットの文字コードが使われているところがある
これだと、日本語を使ったときに文字化けすることがある
日本語も使えるutf8に設定する
👇
MySQLの設定はmy.cnfというファイルに記述されている
👇
my.cnfのファイルの場所を調べるには

mysql --help | grep my.cnf

👇
MySQLの設定は複数の場所に記述できる

sudo vim /etc/mysql/my.cnf

MySQLの設定ファイルの編集には管理者権限が必要なので
コマンドの前にsudo をつける

vimはテキストエディタを使うときに使うコマンド

vimに続いて編集したいファイルを指定する

vim についての資料
https://blog.proglus.jp/4194/

👇
設定ファイルが開かれたら
MySQLで使う文字コードをUTF8にする

下の方に移動してキーボードのIキーを押して
INSERTモードにする

[mysqld]
character-set-server=utf8

スペルミス注意!
👇
ファイルを保存してvimを終了するには

esc :wq

念の為確認

cat /etc/mysql/my.cnf

設定ができている
👇
設定を反映させるにはMySQLサーバーを再起動させる

sudo systemctl restart mysql

エラーなどが表示されなければOK
👇
設定ファイルに記述した内容が本当に反映されたか確認
MySQLサーバーにログイン

sudo mysql -u root
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

latin1だったところがutf8になった
exitでログアウト

以上でMySQLサーバーの設定が完了

公式ドキュメントについて

MySQLの公式ドキュメントが公開されているWebサイト
https://dev.mysql.com/doc/refman/5.7/en/

データベース関連の用語について

  • データベース
  • テーブル
  • レコード(ロウ、列)
  • フィールド(カラム、行)
  • SQL

多くのケースで1アプリケーションに対して、
1つのデータベースを作成する
複数作ることもある

実際のデータはデータベースの中に
テーブルという入れ物を作って、そこにデータを格納していく

例えばユーザー情報を管理するusersテーブルや
商品情報を管理するproductsテーブルなど。

テーブルは、簡単にいうとエクセルの表のような形式でデータを管理する

テーブルはデータベースの中で複数作れる
テーブルにある行のことをレコードという
列に相当するところをフィールドカラムという

先頭に記載しているid,name,email,ageの部分をフィールド名(カラム名、列名)という

MySQLではデータを管理しやすいように、レコードにIDを振る
1234といったユニークな管理番号

SQL

  • データベース、テーブル、フィールドやレコードを扱う言語をSQLと呼ぶ
  • SQLは何の略でもないとされる
  • SQLの元となった、IBMが開発した言語のSEQUEL(Structured English Query Language)が由来とされる

例)
select*from users where age >= 20 order by age desc limit 3 offset 3;

SQL 補足

SQLではこの図のようにデータベースに対して
データを挿入、取得、更新、削除できる

データベースの操作

  • データベースの一覧表示
  • データベースの作成
  • データベースの削除
  • データベースの切り替え

MySQLのルートユーザーでMySQLにログイン

sudo mysql -u root

まず

データベースの一覧を表示

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

いくつか表示されるが、MySQLサーバー自身が
管理のために使用しているデータベース

データベースの作成

mysql> create database db01;

db01という名前のデータベースを作る
Query OKと出て、エラーが出なければ成功

db02,03も作り、一覧を表示

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db01               |
| db02               |
| db03               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

データベースの削除

mysql> drop database db03;

db03が消えた

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db01               |
| db02               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

操作対象のデータベースの切替

いま操作対象となっているデータベースは

mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+

で確認できる
NULLは何もないことを意味している
つまり、操作対象のデータベースが選択されていない状態

データベースdb01を操作対象にしてみる

mysql> use db01;

データベースdb01が操作対象になった

mysql> select database();
+------------+
| database() |
+------------+
| db01       |
+------------+

一度MySQLからログアウトexit

MySQLサーバーにログインするとき
使用するデータベースを指定する

sudo mysql -u root db01

操作対象としてdb01が表示されている

mysql> select database();
+------------+
| database() |
+------------+
| db01       |
+------------+

よく使う言葉
クエリ(query)
MySQLサーバーに対して発行するSQLのこと

MySQLのクエリは小文字でも大文字でも区別されない
最近は小文字で書くことのほうが多いらしい


眠すぎるから今日はここまで><
明日もラウンジ行って集中して頑張ろう

Discussion