MySQL/基本操作

出典: フリー教科書『ウィキブックス(Wikibooks)』

Windowsの場合[編集]

XAMPPの場合[編集]

XAMPPのコントロールパネル画面で、Apache と MySQLを両方とも「Start」起動したあとに、MySQL関連項目の「Admin」を押すことで、 phpmyadmin というアプリを起動できる。

この phpmyadmin というアプリが、webブラウザを使ってMySQLを編集するツールである。(PHP作成ツールではない。)名前にPHPとついている理由は単に、このツールがPHPで作成されているからという理由にすぎない。


という機能もあるのだが、これを使わずとも MySQL を起動できる。( phpmyadmin は画面の表示項目がとても多く、初心者には、けっこう難しい。むしろ中級~上級者向け。)

Windowsの場合、コマンドプロンプトで

t>cd c:\xampp\mysql\bin

の入力後、

l\bin>mysql -u root

である。 もしくは環境変数で、

C:\xampp\mysql\bin

を追加する方法もある。


Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.11-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>


また、このフォルダ構成のように、XXAMPPでは、XAMPPのフォルダ内にMySQL(mariaDB)のバイナリを内部に含んでいる仕組みになっており、MySQLの使用のさいには、その内部保管しているMwSQLを呼びだす仕組みになっている。

mariaDB公式サイトから直接ダウンロードした場合[編集]

mariaDB公式サイト にWindowsのインストーラーがあるので、これをダウンロードしてきてもいい。

Windows版の mairDB をインストールしたら、一緒に HeidiSQL もインストールされますが、しばらくは HeidiSQL を起動する必要はありません。

インストーラーの指示どおりにインストールしたら、通常は下記の場所にmaiaDBの実行ファイルがインストールされる。

C:\Program Files\MariaDB 11.1\bin


インストーラーを実行して終わったら、起動のためにはコマンドプロンプトを立ち上げ、下記のようにコマンド入力

C:\>cd C:\Program Files\MariaDB 11.1\bin

C:\Program Files\MariaDB 11.1\bin>start mariadbd

これで起動する。

インストールできたと思ったら、バージョン確認をしよう。

C:\Program Files\MariaDB 11.1\bin>mariadbd --version
mariadbd  Ver 11.1.2-MariaDB for Win64 on AMD64 (mariadb.org binary distribution)

C:\Program Files\MariaDB 11.1\bin>mariadb --version
mariadb from 11.1.2-MariaDB, client 15.2 for Win64 (AMD64), source revision 

終了の方法は・・・(※調査中)


コマンドラインから起動するのは難しいので、windowsタスクバーのスタートメニューからアイコンクリックで起動しよう。

「MySQL Client」というアプリが登録されているので、それを起動すると、インストール時の求められたMySQLパスワードを入力するコマンド画面が出てくるので、そのパスワードを入れてMySQL(mariaDB)に接続する。


MySQLサーバーを終了する場合は、単に

exit

で良い。

もういちど「exit」すると、MySQLクライアント側も終了し、アプリのウィンドウが閉じてアプリ終了になる。

非XAMPPの場合の起動と終了(Linux)[編集]

先にMySQLサーバー(mariadb-server)を起動する必要があります。

もしサーバーを起動せずにmariadbだけ起動してもエラーになり

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

のようなエラーメッセージが表示されるだけです。

サーバーの起動[編集]

起動コマンド

$ systemctl start mariadb

でmariaDBサーバーが立ち上がります。

立ち上がるのはサーバーなので、インストールするのは mariadb だけでなく、加えて mariadb-server もインストールしないと、失敗してしまい、「Fail」などとmariaDB が返事をします。

なので mariadb-server もインストールしましょう。


起動状態の確認コマンドは、

$ systemctl status mariadb

です。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記されます。

なお、確認画面の終了方法は、qボタンです。


mariaDBサーバー終了は

$ systemctl stop mariadb

です。


クライアント/共通部分の起動[編集]

クライアント側は

$ sudo mysql

で起動します。

クライアント側の起動を成功させるためには、先にmariadb-server を起動させておく必要があります。mariadb-serverを起動させないと、データベースへの接続エラーになり、クライアント側も起動できないです。


さて、MySQL(または mariaDB)を起動してからでないと、データベースの作成や編集などは、できないです。

mariaDB の起動に成功すると、

[ユーザー名@localhost ~]$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.4.12-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 


のようなメッセージが表示されます。

コマンドは

MariaDB [(none)]> 

の > の後ろ以降に入力します。そもそも、キーボードの矢印キーでカーソルを移動しても、 > の前には移動できないです。


終了の方法は、 exit または quit で終了します。

MariaDB [testmysql]> exit
Bye

と、MySQLからのログアウト時にサヨナラ(Bye)を言われるハズです。


基本操作[編集]

全体的な決まり[編集]

  • MySQLの命令文は、大文字と小文字を区別しない。
  • 命令の文末はセミコロン「;」である。

データベースの作成[編集]

$ sudo mysql

でmysqlを起動した後に、


create database 作成したいデータベース名 ;

で、データベース作成できます。

セミコロン「;」を付け忘れないように、気をつけてください。

もし、セミコロン「;」を付け忘れた場合、mysql が「まだコマンド入力が終わってない」と判断して、続きの入力を待機しますので、「;」を追加するなど修正してください。またはデタラメな文字を入力したあとにワザとセミコロンを付けて終了させてから、入力をやりなおしてください。


create database testmysql ;

結果として、

コマンドと結果の例
MariaDB [(none)]> create database testmysql ;
Query OK, 1 row affected (0.143 sec)

のように「OK」という返事が現れます。

Query(クエリ)とは、データベース用語のひとつです。



show databases;

で、手元のパソコンでの MySQL 環境に存在しているデータベースの情報を閲覧できます。

たとえば「testmysql」を作成してから show databases; すると、下記のようになります。

※ 実行例
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testmysql          |
+--------------------+
4 rows in set (0.325 sec)

となります。


performance_schema

以降に、ユーザーの作成したデータベース名が追加されます。

たとえば、さらに追加で「tesu2db」というデータベースを作成したとしましょう。 show databases; すると、下記のようになります。


mariaDB [(none)]> create database test2db ;
Query OK, 1 row affected (0.087 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test2db            |
| testmysql          |
+--------------------+
5 rows in set (0.001 sec)

MariaDB [(none)]>


いっぽう、データベースを削除する方法は、 drop databese コマンドで、このコマンドの直後に下記のように削除したいデータベース名を記述します。つまり

MariaDB [(none)]> drop database test2db;

です。

削除に成功すると、

※ コマンドと結果の例
MariaDB [(none)]> drop database test2db;
Query OK, 0 rows affected (1.918 sec)

のように、OKの返事が出ます。


実際、show databese で確かめてみると

mariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testmysql          |
+--------------------+
4 rows in set (0.098 sec)

のように、たしかに指定した「test2db」が削除されるハズです。


データベースへの接続[編集]

use データベース名;

で、そのデータベースに接続して、ユーザー(プログラマーであるアナタのこと)が使用や編集などをできるようになります。

接続に成功すると

※ コマンドと結果の例
MariaDB [(none)]> use testmysql;
Database changed

のように Database changed と表示されます。


テーブル[編集]

テーブルの作成[編集]

create database コマンドだけでは、データベースの入れ物を作っただけです。

まだ、中身は無い状態です。

元素番号 元素名 元素記号
1 水素 H
6 炭素 C
7 窒素 N
8 酸素 O
16 硫黄 S
20 カルシウム Ca
26 Fe
29 Cu
47 Ag
79 Au


MySQL では、右図のような、テーブル的なデータベースを作れます。(ただし、SQLだけでは画像的には表示されないです。右図は、説明のために載せています。)


MySQL でテーブルを作成する場合には手順として、useによる接続後は、まず、

右図の「元素番号」,「元素名」、「元素記号」に相当するような、タイトル部分を作らないといけません。


次のようなコマンドで作ります。

create table testTable( gensobangou int,gensomei text,gensokigou text );

書式は

create table 接続中のテーブル名( 1列目の名称 データ型 , 2列目の名称 データ型, 3列目の名称 データ型 );

です。


テーブルの削除[編集]

なお、テーブルの削除の方法は

drop table 削除したいテーブル名;

です。

コマンドと結果の例
MariaDB [testmysql]> drop table testTable;
Query OK, 0 rows affected (2.125 sec)

テーブルの情報閲覧[編集]

作成したテーブル構造の情報を見る方法は、

desc 調べたいテーブル名;

です。

※ コマンドと結果の例
MariaDB [testmysql]> desc testTable;
+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| gensobangou | int(11) | YES  |     | NULL    |       |
| gensomei    | text    | YES  |     | NULL    |       |
| gensokigou  | text    | YES  |     | NULL    |       |
+-------------+---------+------+-----+---------+-------+
3 rows in set (0.033 sec)

テーブルへのデータの登録[編集]

テーブルへのデータの登録のコマンドは、

insert into テーブル名 (登録ずみの列名1, 登録ずみの列名2, 登録ずみの列名3) values( 登録するデータ1, 登録するデータ2, 登録するデータ3 );

のような書式になります。


たとえば、

※ コマンドと結果の例
MariaDB [testmysql]> insert into testTable (gensobangou,gensomei,gensokigou) values(1, "Hydrogen", "H" );
Query OK, 1 row affected (0.486 sec)

のようになります。


テーブルに登録されたデータ内容を表示するには select 列名 from テーブル名; で表示できます。

たとえば、下記のようになります。

MariaDB [testmysql]> select * from testTable;
+-------------+----------+------------+
| gensobangou | gensomei | gensokigou |
+-------------+----------+------------+
|           1 | Hydrogen | H          |
+-------------+----------+------------+
1 row in set (0.079 sec)

* 」とは、この場合では「すべて」を意味する、コンピュータ業界の慣用句であり、このような意味での「*」の呼び名を『ワイルドカード』と言います。

まだ、1行目しか登録してないので、1行ぶんしか表示されないですが、もし2行目以降を登録すれば、2行目以降も select で表示されるようになります。


なお、このようにして登録された「 1, Hydrogen, H 」のような、SQLテーブルの中身の情報の行(ぎょう)のことを「レコード」と言います。


さて、もしアナタが文献調査か何かで「『Helium』(ヘリウム)という元素があるという事が分かり、元素記号も「He」だと分かったが、しかし元素番号が分からない」というように、部分的にしか情報が分からなくても、部分的にだけデータを登録することも可能です。


タイトルすべてを列記する必要はなく、

MariaDB [testmysql]> insert into testTable (gensobangou, gensomei) values(2, "Helium" );
Query OK, 1 row affected (0.183 sec)

のように、最初のカッコで、分かった項目の列タイトルだけを書いておけば、vaules の中身をその順番どおりに登録します。


また、select * すれば、表示結果は

MariaDB [testmysql]> select * from testTable;
+-------------+----------+------------+
| gensobangou | gensomei | gensokigou |
+-------------+----------+------------+
|           1 | Hydrogen | H          |
|           2 | Helium   | NULL       |
+-------------+----------+------------+
2 rows in set (0.000 sec)

となります。上記のように、未登録のデータの部分には「NULL」と表示されます。



特定のデータを検索したい場合、例えば下記のようになります。

MariaDB [testmysql]> SELECT * FROM testTable WHERE gensobangou = '2';
+-------------+----------+------------+
| gensobangou | gensomei | gensokigou |
+-------------+----------+------------+
|           2 | Helium   | NULL       |
+-------------+----------+------------+
1 row in set (0.001 sec)

MariaDB [testmysql]>

この例では、元素番号が2のものだけを検索しています。


書式は

SELECT 表示したい項目 FROM 検索対象のテーブル WHERE 条件式 ;

です。

データの部分削除[編集]

たとえば、ヘリウムのgensomeiデータ「Helium」の行(レコード)を削除したい場合、

MariaDB [testmysql]> delete from testTable where gensomei = "Helium";
Query OK, 1 row affected (0.214 sec)

となります。

これをすると、消えるのは、Helium という名前に加えて、gensobangou(元素番号)の「2」も消えます。


実際、delete のあとに show してみると

MariaDB [testmysql]> select * from testTable;
+-------------+----------+------------+
| gensobangou | gensomei | gensokigou |
+-------------+----------+------------+
|           1 | Hydrogen | H          |
+-------------+----------+------------+
1 row in set (0.000 sec)

のように、Helium だけでなく、元素番号「2」も消えています。


終了後に再開するとき[編集]

まず、use コマンドで作成済みデータベースに接続する。

MariaDB [(none)]> use testmysql
Database changed
MariaDB [testmysql]>


その後、私たちの例なら select * from testTable; のように入力すれば良い。

MariaDB [testmysql]> select * from testTable;
+-------------+----------+------------+
| gensobangou | gensomei | gensokigou |
+-------------+----------+------------+
|           1 | Hydrogen | H          |
|           2 | Helium   | NULL       |
+-------------+----------+------------+
2 rows in set (0.001 sec)

MariaDB [testmysql]>

のように表示される。


なお、設定の保存先は windows の場合、

C:\Program Files\MariaDB 11.1\data

である。(バージョン番号のところは、ダウンロードしたバージョンによって違う。)

そのフォルダに、私たちの作っている testtable もあるはず。

バックアップするときやコピーするときなどは、このフォルダをコピーすればいい。