C言語+MySQL入門|MySQLへログインする

C言語+MySQL入門|MySQLへログインする
前の記事では、MySQL Serverが接続・認証・SQL実行・データ保存を担当することを確認しました。
今回は、MySQLクライアントからサーバーへログインし、SQLを入力できる状態にしましょう。
第2章でも接続確認を行いましたが、この記事では、これからデータベースを操作していくために、接続コマンドの意味やプロンプトの読み方を詳しく確認します。
この記事では、次の内容を扱います。
- 管理作業用のrootアカウントで接続する
- パスワードを対話入力する方法と、直接指定する方法を確認する
- WindowsのコマンドプロンプトとMySQLのプロンプトを区別する
- SQLを入力して、結果を確認する
- 入力途中のSQLを取り消す
- MySQLクライアントを終了する
この記事の到達点は、自分でMySQLへログインし、SQLを入力して結果を確認した後、接続を終了できるようになることです。
今回は管理作業用のrootで接続する
これから、在庫管理用のデータベースやテーブル、学習用の接続ユーザーを作成していきます。
その準備を行うため、今回はMySQLの管理用アカウントであるrootを使用します。
第2章で設定した接続情報を確認しましょう。
| 項目 | 今回使用する値 | 意味 |
|---|---|---|
| Windowsサービス名 | MySQL84 | MySQL Serverを動かすサービス |
| 接続先 | 127.0.0.1 | 自分のPCで動くサーバー |
| ポート番号 | 3306 | MySQLの通常の接続用ポート |
| MySQLユーザー名 | root | 管理作業に使用するアカウント |
| 学習用パスワード | password | 第2章で設定したパスワード |
| データベース名 | 今回は指定しない | inventory_dbは次の記事で作成する |
自分の環境でポート番号やパスワードを変更した場合は、その値に読み替えてください。
管理用ユーザーとアプリ用ユーザーを分ける
rootは、データベースやユーザーなどを管理するための強い権限を持っています。
第4章で作成するCプログラムには、第3章の後半で用意する学習用の専用ユーザーを使います。
| 作業 | 使用するユーザー |
|---|---|
| データベースやテーブルの準備 | 管理用のroot |
| 学習用ユーザーの作成と権限設定 | 管理用のroot |
| 第4章のCプログラムからの接続 | 後で作成する学習用の専用ユーザー |
今は、データベースを使うための準備を管理用ユーザーで行う、と考えておきましょう。
MySQL Serverが動いていることを確認する
ログインする前に、MySQL Serverが起動していることを確認します。
- WindowsキーとRキーを押す。
- 名前の欄にservices.mscを入力する。
- サービス管理画面でMySQL84を探す。
- 状態が実行中になっていることを確認する。

停止している場合は、MySQL84を右クリックし、開始を選びます。サービスの開始操作では、管理者の許可が必要になる場合があります。
サービス名を変更している場合は、自分で設定した名前を確認してください。
ここで開始できない場合は、先に第2章の起動確認へ戻りましょう。サービスの設定やエラーログに加え、必要に応じてNetworkService用の一時ディレクトリと書き込み権限も確認します。
Windowsのコマンドプロンプトを開く
今回の接続操作は、第2章と同じように、Windowsのコマンドプロンプトから行います。
スタートメニューでコマンドプロンプトを検索して起動してください。
CプログラムのコンパイルではUCRT64を使用しますが、この記事ではWindows版のmysql.exeを起動します。
| 作業 | 操作する場所 |
|---|---|
| サービスの起動状態を確認する | Windowsのサービス管理画面 |
| mysqlクライアントを起動する | Windowsのコマンドプロンプト |
| 接続後にSQLを入力する | mysqlクライアントの画面 |
| Cプログラムをコンパイルする | MSYS2 UCRT64のターミナル |
同じ文字入力の画面でも、現在どのプログラムが入力を受け付けているのかを意識すると、操作しやすくなります。
MySQLのbinフォルダへ移動する
コマンドプロンプトで、次のコマンドを実行します。
cd /d "C:\Program Files\MySQL\MySQL Server 8.4\bin"移動すると、通常は次のような表示になります。
C:\Program Files\MySQL\MySQL Server 8.4\bin>| コマンドの部分 | 意味 |
|---|---|
| cd | 現在の作業フォルダを変更する |
| /d | 必要に応じてドライブも変更する |
| C:\Program Files\MySQL\MySQL Server 8.4\bin | mysql.exeが配置されているフォルダ |
パスには空白が含まれるため、コマンドではダブルクォーテーションで囲んでいます。
MySQLを別の場所へインストールした場合は、その場所のbinフォルダを指定してください。
なお、この移動はmysql.exeを起動しやすくするためのものです。商品データの保存場所や、接続後に使うデータベースを選択する操作ではありません。
図1:MySQLへログインするための準備

この図から分かること
接続するためには、MySQL Serverが動いている必要があります。
サービスの起動状態を確認した後、mysqlクライアントから接続先とポートを指定します。mysqlクライアントを起動することと、MySQL Serverを起動することは別の操作です。
パスワードを対話入力してログインする
まずは、接続コマンドの実行後にパスワードを入力する方法を試しましょう。
コマンドプロンプトで、次のコマンドを実行します。
mysql -h 127.0.0.1 -P 3306 -u root -pそれぞれの指定には、次の意味があります。
| 指定 | 意味 |
|---|---|
| mysql | MySQLクライアントを起動する |
| -h 127.0.0.1 | 接続先として自分のPCを指定する |
| -P 3306 | 接続するポート番号を指定する |
| -u root | MySQLのユーザー名を指定する |
| -p | パスワードの入力を求める |
大文字の-Pはポート、小文字の-pはパスワードです。
見た目が似ているため、入力するときは大文字と小文字を確認してください。
パスワードの入力を求められたら
コマンドを実行すると、次のように表示されます。
Enter password:ここで、今回の学習用パスワードであるpasswordを入力し、Enterキーを押します。
入力したパスワードは、そのまま読める文字列では表示されません。画面の表示だけで入力できていないと判断せず、入力を終えたらEnterキーを押しましょう。
-pの直後に値を付けない場合は、このように対話入力になります。
mysql>が表示されたら接続できている
接続に成功すると、案内メッセージの後に、次のプロンプトが表示されます。
mysql>プロンプトは、プログラムが入力を待っていることを知らせる目印です。
この表示になったら、MySQLクライアントがSQLなどの入力を受け付ける状態になっています。
mysql>自体を入力する必要はありません。 その右側へ、実行したいSQLを入力します。
パスワードをコマンドへ直接指定する方法
学習用の別の方法として、パスワードを接続コマンドへ直接記述することもできます。
先ほどの方法ですでに接続している場合は、mysql>で次を入力し、いったん終了してください。
exitWindowsのコマンドプロンプトへ戻ったら、次のコマンドを実行します。
mysql -h 127.0.0.1 -P 3306 -u root -ppassword-pとパスワードの間には、空白を入れません。
| 指定方法 | 動作 |
|---|---|
| -p | 起動後にパスワードを入力する |
| -ppassword | passwordをパスワードとして渡す |
| --password=password | 長いオプション名でパスワードを渡す |
-p passwordのように空白を入れると、passwordはパスワードの値ではなく、データベース名として解釈される場合があります。直接指定するときは、-ppasswordの形にそろえましょう。
コマンドへ直接記述したパスワードは、画面やコマンド履歴などに残る可能性があります。そのため、直接指定について警告が表示される場合があります。警告だけで接続失敗と判断せず、その後の表示を確認してください。
この記事では学習用の方法として両方を紹介しています。実際の運用では、十分に強いパスワードを設定し、対話入力などの方法を使います。
プロンプトを見て入力する場所を判断する
MySQLへ接続した後は、入力する内容が変わります。
Windowsのコマンドプロンプトでは、mysqlやcdなどのWindows側のコマンドを実行します。
一方、mysql>では、SELECTなどのSQLや、exitなどのMySQLクライアント用コマンドを入力します。
| 画面の目印 | 入力を受け付けているもの | 入力する内容の例 |
|---|---|---|
| C:\…\bin> | Windowsのコマンドプロンプト | mysql、cd |
| mysql> | MySQLクライアント | SELECTなどのSQL、exit |
| -> | MySQLクライアント | 入力途中のSQLの続き |
たとえば、mysql>でcd /dから始まるコマンドを入力しても、Windowsのフォルダ移動にはなりません。
また、mysql>で接続コマンドをもう一度入力する必要もありません。新しい接続を試す場合は、いったんexitで終了してから実行します。
図2:WindowsとMySQLの入力画面を区別する

この図から分かること
接続前はWindowsのコマンドプロンプトが、接続後はMySQLクライアントが入力を受け付けます。
どちらの画面にいるのかは、プロンプトを見て確認できます。入力する場所に迷ったら、まず画面左側の目印を確認してみましょう。
短いSQLを実行してみよう
mysql>が表示されたら、短いSQLを入力してみましょう。
今回は、テーブルを用意しなくても実行できる計算を使います。SQLファイルへの保存は行わず、mysql>へ直接入力してください。
サーバーで計算して結果を取得する
次のSQLを入力し、Enterキーを押します。
SELECT 1 + 1 AS calculation_result;実行結果の例
表示される結果は、次の内容になります。
+--------------------+
| calculation_result |
+--------------------+
| 2 |
+--------------------+SELECTは、値や式の結果、テーブルのデータなどを取得する命令です。
今回のSQLでは、MySQL Serverに1 + 1を計算してもらい、その結果を取得しています。
| SQLの部分 | 意味 |
|---|---|
| SELECT | 指定した値や式の結果を取得する |
| 1 + 1 | 計算する式 |
| AS calculation_result | 結果の列名をcalculation_resultにする |
| ; | 今回の入力方法でSQLの終わりを示す |
結果が表示された後、再びmysql>に戻ります。これは、次のSQLを入力できる状態になったということです。
セミコロンと改行の違いを知る
mysqlクライアントでは、通常、SQLの末尾にセミコロンを付けて実行します。
Enterキーで改行することと、SQLを完成させて実行することは別です。複数行に分けて入力した場合は、通常、末尾のセミコロンまで入力すると実行されます。
先ほどのSQLは、次のように分けて書くこともできます。
SELECT
1 + 1 AS calculation_result;実行結果は、1行で入力した場合と同じです。
+--------------------+
| calculation_result |
+--------------------+
| 2 |
+--------------------+->はSQLの続きを待っている目印
SELECTだけを入力してEnterキーを押すと、プロンプトが次のように変わります。
mysql> SELECT
->->は、SQLの続きを待っていることを表します。エラーが発生したという意味ではありません。
この状態では、次の内容を入力してSQLを完成させます。
1 + 1 AS calculation_result;なお、このコードは、直前にSELECTを入力した状態で続けて入力する内容です。最初から実行する場合は、前に示した完全なSQLを使ってください。
セミコロンを忘れた場合
たとえば、次のように末尾のセミコロンを付けずに入力したとします。
mysql> SELECT 1 + 1 AS calculation_result
->この場合は、続けてセミコロンだけを入力し、Enterキーを押せば実行できます。
;画面が止まったように見えたときも、まずプロンプトを確認しましょう。->なら、処理に時間がかかっているのではなく、入力がまだ完成していない可能性があります。
接続したアカウントを確認する
計算ができたら、今度は接続の情報を調べてみましょう。
認証されたアカウントと選択中のデータベースを表示する
mysql>で、次のSQLを実行します。
SELECT
CURRENT_USER() AS authenticated_account,
DATABASE() AS current_database;実行結果の例
今回の接続では、次のような結果になります。
+-----------------------+------------------+
| authenticated_account | current_database |
+-----------------------+------------------+
| root@localhost | NULL |
+-----------------------+------------------+| SQLの部分 | 確認できる内容 |
|---|---|
| CURRENT_USER() | この接続で認証に使われたMySQLアカウント |
| DATABASE() | 現在選択しているデータベース |
| AS | 結果に表示する列名を指定する |
CURRENT_USER()の結果は、サーバー側のアカウント設定によって異なります。DATABASE()は、既定のデータベースを選択していない場合にNULLを返します。
127.0.0.1へ接続したのにlocalhostと表示される理由
接続コマンドの127.0.0.1は、通信するサーバーの接続先です。
一方、CURRENT_USER()のroot@localhostは、認証に使われたアカウントを表します。
両者は表示している対象が異なるため、文字列が完全に同じになるとは限りません。
NULLはログイン失敗ではない
今回の接続コマンドでは、データベース名を指定していません。
そのため、current_databaseがNULLでも問題ありません。サーバーへ接続できていても、作業対象のデータベースはまだ選んでいない状態です。
inventory_dbは次の記事で作成し、利用するデータベースとして選択していきます。
入力途中のSQLを取り消す
SQLを入力している途中で、最初から書き直したくなることもあります。
mysqlクライアントでは、入力途中の内容を取り消すために\cを使えます。これは、クライアントが保持している現在の入力を消去するコマンドです。
たとえば、SELECTまで入力した状態で、次のように操作します。
mysql> SELECT
-> \c
mysql>自分で入力するのは、SELECTと、次の行の\cです。mysql>や->は画面側が表示します。
\cを入力してEnterキーを押すと、入力途中のSQLが取り消され、新しいSQLを入力できる状態へ戻ります。
\cは、実行済みのSQLを取り消す命令ではありません。
すでに実行したデータの変更を取り消す仕組みとは、分けて考えましょう。
引用符を閉じ忘れた場合は表示が変わる
後の記事で文字列を入力するときには、引用符の閉じ忘れにも注意します。
| プロンプト | 主な意味 |
|---|---|
| mysql> | 新しい入力を待っている |
| -> | SQLの続きを待っている |
| '> | シングルクォーテーションで始めた文字列が閉じられていない |
| "> | ダブルクォーテーションで始めた文字列などが閉じられていない |
文字列の途中では、\cだけを入力しても文字列の一部として扱われる場合があります。その場合は、対応する引用符を閉じてから\cを入力します。
たとえば、シングルクォーテーションの閉じ忘れで'>になっている場合、入力する内容は次のとおりです。
'\cこの例では、先頭のシングルクォーテーションで文字列を閉じ、その後の\cで入力を取り消します。セミコロンを付けて実行する必要はありません。
MySQLクライアントを終了する
作業が終わったら、mysql>で次を入力します。
exit実行結果の例
Byeその後、Windowsのコマンドプロンプトへ戻ります。
C:\Program Files\MySQL\MySQL Server 8.4\bin>exitは、MySQLクライアントを終了するためのコマンドです。ここでは、セミコロンを付けずに実行できます。
終了方法には、次の選択肢もあります。
| 入力するコマンド | 動作 |
|---|---|
| exit | MySQLクライアントを終了する |
| quit | 同じように終了する |
| \q | 短い形式で終了する |
入力途中で->などが表示されている場合は、先に入力を取り消し、mysql>へ戻ってから終了すると分かりやすくなります。
クライアントを終了してもサーバーは動き続ける
exitで終了するのは、今回起動したmysqlクライアントです。
WindowsサービスのMySQL84を停止する操作ではありません。再び接続コマンドを実行すれば、起動中のMySQL Serverへログインできます。
また、ログインするたびにMySQLをインストールし直したり、サービスを登録し直したりする必要もありません。
図3:ログインからSQLの確認、終了までの流れ

この図から分かること
MySQLを操作するときは、接続し、SQLを入力し、結果を確認してから終了します。
SQLを実行するたびに接続し直す必要はありません。一つの接続で複数のSQLを順番に実行できます。
クライアントを終了した後も、MySQL Serverは別のプログラムとして動き続けます。
ログインや入力で困ったときは
接続できない場合や、入力しても反応がないように見える場合は、画面の状態から確認していきましょう。
| 表示・状況 | 主に確認すること |
|---|---|
| mysqlがコマンドとして認識されない | mysql.exeがあるbinフォルダへ移動したか |
| ERROR 2003など、接続できないエラー | MySQL84の起動状態、接続先、ポート番号 |
| ERROR 1045など、認証を拒否されるエラー | ユーザー名、パスワード、接続元に対応するアカウント |
| ERROR 1049など、データベースが見つからないエラー | 未作成のデータベース名を指定していないか |
| ->が表示されたままになる | SQLの末尾にセミコロンがあるか |
| '>や">が表示される | 引用符を閉じ忘れていないか |
| mysql>でWindowsのコマンドが使えない | exitでWindowsのコマンドプロンプトへ戻る |
| DATABASE()がNULLになる | データベースをまだ選択していない状態か |
パスワードを使ったことと、正しいことは別
認証エラーにusing password: YESと表示されることがあります。
これは、パスワードを使用して接続を試みたことを表します。入力したパスワードが正しいという意味ではありません。
今回の学習環境では、rootのパスワードとしてpasswordを使っています。大文字・小文字や入力した値を確認しましょう。
エラーが出ても、最初からやり直す必要はない
SQLの入力を間違えても、接続が維持されていれば、mysql>から修正したSQLを入力し直せます。
接続に失敗した場合は接続情報を、SQLの入力で止まった場合はプロンプトや文末を確認する、というように段階を分けると整理しやすくなります。
次はデータベースを作成する
MySQLへログインし、SQLの実行結果を確認できたら、データベースを操作する準備が整いました。
次の記事では、在庫管理アプリで使うinventory_dbを作成します。作成したデータベースを確認し、これから商品や在庫履歴のテーブルを置く場所として選択していきましょう。










