MySQLを基礎から学ぶその1 MySQLとは

この記事は[JavaとPythonを基礎から学びたい私のための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/aruhitonocalendar)の23日目の記事です。学べるところまで学びます。
非常に複雑なので、導入だけまずはやっていきます。
# MySQLとは
大量のデータが入ったデータセットを扱うための言語で、データベース言語と呼ばれているそうです。データベースのどの範囲に何をするかといったことを命令します。そこら辺のPythonとかC#とかとは違うもののようです。

# 導入

https://dev.mysql.com/downloads/installer/

上のサイトからダウンロードして、セットアップをするだけで行けました。
![アドカレ23写真.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/f449cde1-38f9-3f0d-48d5-bcd9c1547f90.png)

すべて終わると上の写真のようになりました。（どこを隠したらいいのかわからなかったので、とりあえず隠した方がよさそうなところを隠しておきました。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/aace3800-d08e-85cc-37b1-af5bcb5f4235.png)

これも一緒に出てきます。こちらのMySQL Shellを使っていろいろ作業を行っていきます。
# 使い方
MySQLでは「JS」,「PY」,「SQL」の3種類が選べるようです。
それぞれ「Javascript」,「Python」,「SQL」です。使う言語を変えられるようです。今MySQL JSと表示されていますがJavascriptでなくSQLを使ってみたいので以下のように入力します。
```
\SQL
```
これでSQLの言語を使って作業することが可能です。
その後、サーバーに接続するようです。接続しないと、
```
 MySQL  SQL > SELECT database();
ERROR: Not connected.
```
とこのようにエラーが出て先に進めませんでした。
サーバー接続の様子を以下に載せておきます。
```sql
 MySQL  SQL > \connect root@localhost
Creating a session to 'root@localhost'
Please provide the password for 'root@localhost': ********
Save password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No): Y
Fetching global names for auto-completion... Press ^C to stop.
Your MySQL connection id is 00 (X protocol)
Server version: 8.0.40 MySQL Community Server - GPL
No default schema selected; type \use <schema> to set one.
 MySQL  localhost:00000+ ssl  SQL >
```
消した方がよさそうなidの部分とかは変えてありますが、そのまま行ったことを載せています。
### 解説　
①まずは接続するためのコマンドを
```
 \connect root@localhost
```
これを入力します。接続先はlocalhostとなっていますが、これは自分自身のパソコンのことを指しているようです。次に
```
Please provide the password for 'root@localhost': ********
Save password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No): Y
```
設定したパスワードを聞かれますが、これは導入時に設定したもので行けました。保存もしてくれるみたいです。あとは自動で接続してくれます。" MySQL  localhost:00000+ ssl  SQL >"が出てくれば接続されているはずです。これでやっとスタートラインに立てました。
# 使ってみる

### データベース作成
まずは処理を行うためのデータを作ってみようと思います。
```
> create database Testdb;
Query OK, 1 row affected (0.0049 sec)
```
create database 名前;で作ることができるみたいです。OKと出てきているのでおそらくできていると思います

### データベース確認
念のため、今ちゃんとデータベースができたか確認します。
以下でデータベースの全体を見ることができるようです。
```
 show databases;
```
結果:
```
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| testdb             |
| world              |
+--------------------+
7 rows in set (0.0013 sec)
```
こんな感じで表として出てくるみたいです。ちゃんと中に今作ったtestdbが入っていました。が、worldとかsakilaとかいう謎のデータベースもありました。これらはMySQLが出しているお試しのデータベースみたいです。とりあえずsakilaを使ってみます。
### データベースを出す
今回は標準で入っている「sakila」を試しに動かしてみます。
```
use sakila
```
これでsakilaを選択できます。Default schema set to `sakila`.とか出てきますが、その中の「schema」というのはデータベースみたいな感じのもののようです。
### テーブルを見る
テーブルを見ることができます。
```
 SQL > show tables;
+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.0020 sec)
```
32個もテーブルがあるようです。ここでいうテーブルは、データのまとまりの名前のようなものです。
### テーブルの中身を確認する
今回は上のテーブルのうち、「city」の中身を確認してみます。確認するには
```
select*from city;
```
と入力するようです。from cityでcityを指定して、select*ですべてを選択しています。*は全選択のようです。

今日の分ここまで
# まとめ
MySQLはデータベースを扱うことを専門とした言語で、PythonやJavascriptとは違う。ただし、これらの言語を使うことができる。
データセットを選択し、表示することができる。
# 参考文献

https://products.sint.co.jp/topsic/blog/sql

https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-install-starting.html

https://stackoverflow.com/questions/50421670/mysql-error-not-connected

http://taustation.com/mysql-show-and-connect-databases/

https://www.javadrive.jp/mysql/database/index1.html

https://wa3.i-3-i.info/word1102.html

https://maru-note.net/entry/2022/12/12/214807

https://oreno-it3.info/archives/853