教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習

MySQL (1)

1. SQLとは

SQL(Structured Query Language)とは、リレーショナルデータベース を取り扱うための言語である。SQLは、リレーショナルデータベース を操作する種類により、以下の3種類に分類される。

データ定義言語 (DDL)

データを格納するためのテーブルの定義や、情報を参照する ためのビューを定義するときに用いる。DDLには、次のような 機能がある。

データ操作言語 (DML)

データを取得したり、データを追加するときに用いる。 DMLの機能は、以下に示される。

データ制御言語 (DCL)

データベースを制御するときに用いる。次の機能をもつ。

2. MySQLとは

MySQL AB社が提供する、高速で動作する、オープンソースのリレーショナル データベース管理システムの一種。複数のユーザが同時に利用でき、大規模な データベースを取り扱うことができる。

MySQLは、以下のような特徴を有する。

なお、MySQLでは、以下の機能はサポートされていない。

MySQL データベース管理システムの概要

3. MySQLクライアントプログラム

MySQLには、SQL文を実行するためのコマンドラインインターフェイス となる、クライアントプログラムが提供されている。プログラムは、 mysqlコマンドの実行により起動され、SQL文が入力されると、SQL文 がMySQLサーバに送られ、サーバで処理された結果が出力として表示 される。

1) mysqlコマンドの実行

MYSQLサーバが起動していることを確認してから、MySQLのクライアント プログラムを、以下のように実行する。

コマンドライン上で、mysqlコマンドを

  % mysql オプション

オプションには、ユーザ名やデータベース名を指定する。 たとえば、MySQLサーバが稼動しているマシン上(ローカルホスト) で使う場合には、以下のようにする。

  % mysql -u ユーザ名 --password=パスワード データベース名

MySQLサーバが稼動しているマシン以外から接続する場合には、以下のように 接続先のホスト名を指定して起動する。

  % mysql -u ユーザ名 --password=パスワード --host=接続先ホスト名 データベース名

mysqlコマンドの起動が成功すると、接続がおこなわれ

  mysql>
というmysqlのプロンプトが表示されるので、SQLコマンドを入力する。

ローカルホストに接続する場合には、接続先ホスト名を省略可能。たとえば、

  % mysql test
では、ローカルホストに接続して、testというデータベースを使用することを あらわす。

さらに、データベース名を直接指定しないで、ありあえずサーバに 接続したい場合には、以下のようにデータベース名を省略して接続可能である。

  % mysql

mysqlコマンドを終了させるためには、次のようにexitと入力してENTERキーを 押す。

mysql> exit

Bye

;(セミコロン)はSQL文の終端を意味する。;でENTERキーが押されるたびに、 SQL文が実行される。 MySQLでは、データベース名やテーブル名の大文字と小文字は区別するが、 それ以外については、大文字、小文字の区別はおこなわない。 たとえば、以下のコマンドは同じものとして取り扱われる。

mysql> select * from table1;
mysql> SELECT * FROM table1;
mysql> sEleCt * fRoM table1;

SQLコマンドの値には、数値、文字、関数が使用可能。文字を指定する 場合には、'(シングルクウオーテエーション)で文字を囲む必要がある。

2) データベース一覧の表示

現在使用中のデータベース一覧を表示するためには、 SHOW DATABASEコマンドを用いる。実行すると、 以下のように作成されたデータベースが表示される。 なお、ここで表示されているmysqlとtestという2つ のデータベースは、MySQLであらかじめ提供されて いるものである。

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.06 sec)

3) データベースの接続

mysql> use データベース名;

たとえば、

mysql> use test;
では、testデータベースに接続することを あらわす。

また、mysqlを起動する際に、

% mysql データベース名
として、データベース名を引数で渡すと、 そのデータベースを選択した状態で、 mysqlが起動する。

testデータベースに接続するには、

% mysql test
を実行する。

4) テーブル一覧の表示

現在使用中のデータベースに含まれるテーブルの一覧を表示するためには、 SHOW TABLESコマンドを用いる。

mysql> show tables;

ここで、

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
を実行してtestデータベースに接続する。

たとえば、mysql> show tables; を実行すると、 以下のようになる。この実行結果は、testデータベース 中にaという1つのテーブルがあることを示している。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a              |
+----------------+
1 row in set (0.00 sec)
mysql> 

5) データベースの作成

新しいデータベースを作成するためには、CREATE DATABASEコマンドを 用いる。以下のように、作成するデータベース名を指定する。

mysql> create database データベース名;
データベースの作成では、以下の制約があるので、注意すること。

たとえば、test_1というデータベースを作成するためには、 create database文を実行すると以下のようになる。

mysql> create database test_1;
Query OK, 1 row affected (0.00 sec)

mysql>

6) データベースの削除

DROP DATABASEコマンドは、データベースを削除するために用いる。 なお、データベースを削除すると、そのデータベースに登録してある データも一緒に削除されてしまうので注意が必要である。

mysql> drop database 削除するデータベース名;

たとえば、test_1というデータベースを削除するためには、 drop database文を実行する。実行結果は、以下のようになる。

mysql> drop database test_1;
Query OK, 0 row affected (0.00 sec)

mysql>

7) テーブルの作成

テーブルを作成するためには、CREATE TABLEコマンドを使用する。 テーブル名の後に続く()の中には、フィールド名とその型など テーブルの内容を記述する。それぞれの定義は、","(カンマ) で区切られる。

mysql> create table テーブル名 (フィールド名1 データ型1, フィールド名2 カラム名2 データ型2, ...);

フィールドに指定できるデータ型は、以下のようになっている。

文字型データ
CHAR(n) 固定長文字列(0〜255文字までの間で、長さの決まった文字列)
VARCHAR(n) 可変長文字列(0〜255文字までの間で、自由な長さの文字列)

整数型データ
INT 符号付整数
SMALLINT 小桁符号付整数

実数型データ
FLOAT(p) 精度pの浮動小数点

ビット型データ
BIT(n) 固定長のビット型

日付/時刻型データ
DATE 日付(年月日)
TIME 時刻(時分秒)
TIMESTAMP 日付と時刻

まず、以下のようにuseコマンドを実行して作成したデータベース test_1に接続する。

mysql> use test_1;
Database changed
mysql>

次に、CREATE TABLE文を実行して以下に示す構造のテーブルを作成する。

fruitテーブルの構造

フィールド名 データ型説明
no INT(2)番号
nameVARCHAR(10)名前
priceINT(4)値段

上記の構造をもつテーブルを作成するために、以下のCREATE TABLEコマンドを 実行する。その実行結果は、以下に示される。

mysql> create table fruit (no INT(2), name VARCHAR(10), price INT(4));
Query OK, 0 rows affected (0.02 sec)

mysql>

8) テーブルの構造の表示

テーブルの構造を確認するために、SHOW FIELDSコマンドを利用する。 作成したfruitテーブルの構造を作成するために、以下の SHOW FIELDSコマンドを実行する。その実行結果は以下に示される。

mysql> show fields from fruit;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int(2)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| price | int(4)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>

9) テーブルの構造の変更

一度作成したテーブルの構造を変更したい場合に、ALTER TABLEコマンドを利用する。

mysql> alter table テーブル名 変更命令;

ALTER TABLEコマンドの変更命令は、以下のようになる。
操作 コマンド
フィールドの追加 ADD
フィールドの変更 CHANGE, MODIFY
フィールドの削除 DROP
フィールドの変更 RENAME
フィールドの追加 ADD INDEX

ADD UNIQUE

ADD PRIMARY KEY
インデックスの削除DROP INDEX

DROP PRIMARY KEY

たとえば、fruitテーブルからpriceフィールドを削除してみる。 そのためには、以下のようなALTER TABLEコマンドを実行する。 その実行結果は、以下のようになる。

mysql> alter table fruit drop price;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>

今削除したpriceフィールドを追加してみる。 そのためには、以下のようなALTER TABLEコマンドを実行する。 その実行結果は、以下のようになる。

mysql> alter table fruit add price INT(4);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>

10) レコードの追加

テーブルにデータ(レコード)を挿入する場合に、INSERTコマンドを利用する。 VALUESの後、()で囲まれた部分に、値をコンマ区切りで与える。 値は、CREATE TABLEで指定されたフィールドの順番で挿入される。 フィールドの数と与える値の数が一致する必要がある。まあ、文字列 の値は、'(シングルクオーテーョン)で囲むことが必要である。

mysql> insert into テーブル名 (フィールド名1, フィールド名2, ...) 
       values (値1, 値2, ...);

たとえば、以下のようなデータ(レコード)を入力したテーブルを作成するものとする。

fruitテーブル

no nameprice
1apple100
2grape130
3banana90
4peach150
5meron600

テーブルにデータ(レコード)を入力ために、以下のようなINSERTコマンド を実行する。その実行結果は次のようになる。

mysql> insert into fruit (no, name, price) values (1, 'apple', 100);
Query OK, 1 row affected (0.00 sec)

mysql> insert into fruit (no, name, price) values (2, 'grape', 130);
Query OK, 1 row affected (0.00 sec)

mysql> insert into fruit (no, name, price) values (3, 'banana', 90);
Query OK, 1 row affected (0.00 sec)

mysql> insert into fruit (no, name, price) values (4, 'peach', 150);
Query OK, 1 row affected (0.00 sec)

mysql> insert into fruit (no, name, price) values (5, 'meron', 600);
Query OK, 1 row affected (0.00 sec)

mysql>

11) レコードの変更

テーブルに挿入されているデータを更新するために、UPDATEコマンドを 利用する。

mysql> update テーブル名 set フィールド名1 = 値1 , フィールド名2 = 値2, ...
    where 条件;

たとえば、上記のfruitテーブルのメロンの価格を変更する。 そのためには、以下のようなUPDATEコマンドを実行することが 必要となる。その実行結果は次に示される。

mysql> update fruit set price = 300 where name = 'meron';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql>

12) レコードの削除

テーブルからデータ(レコード)を削除するために、 DELETEコマンドを利用する。ここでは、条件式を 満足するレコードを削除する。

mysql> delete from テーブル名 where 条件式;

たとえば、上記のfruitテーブルのメロンが含まれるレコード を削除する。そのためには、以下のようなDELETEコマンドを実行することが 必要となる。その実行結果は次に示される。

mysql> delete from fruit where name = 'meron';
Query OK, 1 row affected (0.00 sec)
mysql>

13) データの検索

テーブルに保存されたデータを表示したり、検索する場合には、以下 のようなSELECTコマンドを利用する。

mysql> select 検索したいフィールド名 from 検索対象であるテーブル名;

たとえば、fruitテーブルに格納されているすべてのデータを取り出して 表示してみよう。 そのためには、以下のようなSELECTコマンドを実行することが必要となる。 その実行結果については、次のようになる。

mysql> select * from fruit;
+------+--------+-------+
| no   | name   | price |
+------+--------+-------+
|    1 | apple  |   100 |
|    2 | grape  |   130 |
|    3 | banana |    90 |
|    4 | peach  |   150 |
+------+--------+-------+
4 rows in set (0.00 sec)

mysql>

14) 検索条件の指定

SELECTコマンドには、条件式を指定して、検索することが可能 である。この場合には、FROMの後ろにWHERE節で条件を付加する。

mysql> select * from テーブル名 where 条件式;

WHERE以降の条件式の記述は以下のようになる。

フィールド名 比較演算子

比較演算子の意味は、以下の表のとおりである。

式  内容 
フィールド名 = 検索キー(データ) 検索キーと一致する
フィールド名 < 検索キー(データ) 検索キーより小さい
フィールド名 > 検索キー(データ) 検索キーより大きい
フィールド名 >= 検索キー(データ) 検索キー以上
フィールド名 <= 検索キー(データ) 検索キー以下
フィールド名 <> 検索キー(データ) 検索キーと一致しない

15) はじめてのMySQLを利用したデータベース作成

必ず、Xドライブ下の、mysqlbk.cmdを実行する。 MySQL自動バックアップについて

【バックアップ方法】

・Zドライブに「MySQL-Backup」フォルダがある場合、ログオフ時に自動的にフ ォルダ内にバックアップファイルが作成されます。 (YドライブのMySQLフォルダ内にある「0.MySQLバックアップフォルダ作成.bat」を 実行すると、上記のフォルダが作成されます。)

・データは「mysql.sql」と「(日付).sql」の2種類です。 ログオフする毎に上書きされます。 「(日付).sql」はログオンする日付が変わるたびに増えていき、その日の最終 ログオフ時の状態で保存されます。

【リストア方法】

・バックアップフォルダ内に「mysql.sql」ファイルがある場合、ログオン時に 自動的に実習機へリストアが行われます。

・「mysql.sql」のファイルがおかしい(リストアできない)場合、「(日付). sql」を「mysql.sql」に変更して、 再ログオンしてみてください。

【手動実行】

・「1.MySQLバックアップフォルダにバックアップ.bat」 「2.MySQLバックアップフォルダからリストア.bat」を実行すると、手動でバックアップ/リストアすることができます。

・バックアップ先は「Z:\MySQL-Backup」フォルダになります。

【その他】

・正常にバックアップできている(ログオン時にリストアできている)のであれ ば、 過去の「(日付).sql」は削除してかまいません。(自動で削除はおこなわれま せん)

・全授業履修後、バックアップの仕組み自体不要になった場合は「MySQL-Backup」 フォルダごと削除してください。 (フォルダの有無でバックアップ実施する・しないを判定しているため)

【フォルダ構造】

Z:\MySQL-Backup\mysql.sql ←バックアップファイル(メイン) このファイルからリス トアを行います 201409xx.sql ←バックアップファイル(日付分) mysql.sqlがおかしい 場合は、このファイルをmysql.sqlにリネーム 201409yy.sql 201409zz.sql

演習問題

問題-1

Windows上で、ローカルホスト上で、MySQLサーバと接続してみよ。 その際に用いたコマンドを示すこと。

問題-2

MySQLで提供されているデータベースの一覧を表示してみよ。 その際に用いたコマンドを示すこと。

問題-3

testデータベースに接続し、データベースに含まれるテーブルの一覧を表示 してみよ。その際に用いたコマンドを示すこと。

問題-4

新たに、test_1というデータベースを作成してみよ。 その際に用いたコマンドを示すこと。

問題-5

SHOW DATABASESコマンドを実行し、実行結果を表示してみよ。 問題-4で作成したtest_1データベースに接続し、SHOW TABLESコマンドを 実行して、その実行結果を表示せよ。

問題-6

上の説明で示したfruitテーブルを定義せよ。また、定義したテーブル の構造を確認せよ。その際に用いたコマンドを示すこと。

問題-7

INSERTコマンドを利用してデータを入力し、上記のfruitテーブルを完成させよ。 その際に用いたコマンドを示すこと。

問題-8

INSERTコマンドを利用してデータを入力し、以下に示すfruit1テーブルを完成させよ。 その際に用いたコマンドを示すこと。

fruit1テーブル

no nameprice
1watermeron2000
2pineapple500
3strawberry500
4cherry1500
5orange400

システムプログラミング演習


Yasuo NAGAI