教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習
SQL(Structured Query Language)とは、リレーショナルデータベース を取り扱うための言語である。SQLは、リレーショナルデータベース を操作する種類により、以下の3種類に分類される。
データを格納するためのテーブルの定義や、情報を参照する ためのビューを定義するときに用いる。DDLには、次のような 機能がある。
データを取得したり、データを追加するときに用いる。 DMLの機能は、以下に示される。
データベースを制御するときに用いる。次の機能をもつ。
MySQL AB社が提供する、高速で動作する、オープンソースのリレーショナル データベース管理システムの一種。複数のユーザが同時に利用でき、大規模な データベースを取り扱うことができる。
MySQLは、以下のような特徴を有する。
なお、MySQLでは、以下の機能はサポートされていない。
MySQLには、SQL文を実行するためのコマンドラインインターフェイス となる、クライアントプログラムが提供されている。プログラムは、 mysqlコマンドの実行により起動され、SQL文が入力されると、SQL文 が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コマンドの値には、数値、文字、関数が使用可能。文字を指定する 場合には、'(シングルクウオーテエーション)で文字を囲む必要がある。
現在使用中のデータベース一覧を表示するためには、 SHOW DATABASEコマンドを用いる。実行すると、 以下のように作成されたデータベースが表示される。 なお、ここで表示されているmysqlとtestという2つ のデータベースは、MySQLであらかじめ提供されて いるものである。
mysql> show databases; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.06 sec)
mysql> use データベース名;
たとえば、
mysql> use test;では、testデータベースに接続することを あらわす。
また、mysqlを起動する際に、
% mysql データベース名として、データベース名を引数で渡すと、 そのデータベースを選択した状態で、 mysqlが起動する。
testデータベースに接続するには、
% mysql testを実行する。
現在使用中のデータベースに含まれるテーブルの一覧を表示するためには、 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>
新しいデータベースを作成するためには、CREATE DATABASEコマンドを 用いる。以下のように、作成するデータベース名を指定する。
mysql> create database データベース名;データベースの作成では、以下の制約があるので、注意すること。
たとえば、test_1というデータベースを作成するためには、 create database文を実行すると以下のようになる。
mysql> create database test_1; Query OK, 1 row affected (0.00 sec) mysql>
DROP DATABASEコマンドは、データベースを削除するために用いる。 なお、データベースを削除すると、そのデータベースに登録してある データも一緒に削除されてしまうので注意が必要である。
mysql> drop database 削除するデータベース名;
たとえば、test_1というデータベースを削除するためには、 drop database文を実行する。実行結果は、以下のようになる。
mysql> drop database test_1; Query OK, 0 row affected (0.00 sec) mysql>
テーブルを作成するためには、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文を実行して以下に示す構造のテーブルを作成する。
フィールド名 | データ型 | 説明 |
---|---|---|
no | INT(2) | 番号 |
name | VARCHAR(10) | 名前 |
price | INT(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>
テーブルの構造を確認するために、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>
一度作成したテーブルの構造を変更したい場合に、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>
テーブルにデータ(レコード)を挿入する場合に、INSERTコマンドを利用する。 VALUESの後、()で囲まれた部分に、値をコンマ区切りで与える。 値は、CREATE TABLEで指定されたフィールドの順番で挿入される。 フィールドの数と与える値の数が一致する必要がある。まあ、文字列 の値は、'(シングルクオーテーョン)で囲むことが必要である。
mysql> insert into テーブル名 (フィールド名1, フィールド名2, ...) values (値1, 値2, ...);
たとえば、以下のようなデータ(レコード)を入力したテーブルを作成するものとする。
no | name | price |
---|---|---|
1 | apple | 100 |
2 | grape | 130 |
3 | banana | 90 |
4 | peach | 150 |
5 | meron | 600 |
テーブルにデータ(レコード)を入力ために、以下のような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>
テーブルに挿入されているデータを更新するために、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>
テーブルからデータ(レコード)を削除するために、 DELETEコマンドを利用する。ここでは、条件式を 満足するレコードを削除する。
mysql> delete from テーブル名 where 条件式;
たとえば、上記のfruitテーブルのメロンが含まれるレコード を削除する。そのためには、以下のようなDELETEコマンドを実行することが 必要となる。その実行結果は次に示される。
mysql> delete from fruit where name = 'meron'; Query OK, 1 row affected (0.00 sec) mysql>
テーブルに保存されたデータを表示したり、検索する場合には、以下 のような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>
SELECTコマンドには、条件式を指定して、検索することが可能 である。この場合には、FROMの後ろにWHERE節で条件を付加する。
mysql> select * from テーブル名 where 条件式;
WHERE以降の条件式の記述は以下のようになる。
フィールド名 比較演算子
比較演算子の意味は、以下の表のとおりである。
式 | 内容 |
---|---|
フィールド名 = 検索キー(データ) | 検索キーと一致する |
フィールド名 < 検索キー(データ) | 検索キーより小さい |
フィールド名 > 検索キー(データ) | 検索キーより大きい |
フィールド名 >= 検索キー(データ) | 検索キー以上 |
フィールド名 <= 検索キー(データ) | 検索キー以下 |
フィールド名 <> 検索キー(データ) | 検索キーと一致しない |
必ず、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
問題-2
問題-3
問題-4
問題-5
問題-6
問題-7
問題-8
no | name | price |
---|---|---|
1 | watermeron | 2000 |
2 | pineapple | 500 |
3 | strawberry | 500 |
4 | cherry | 1500 |
5 | orange | 400 |