SQL言語を使う

MySQLに対する動作は、SQL(Structured Query Language)と呼ばれる言語で行います。
SQLは、データベース問い合わせ用の言語として、標準化されている言語で、MySQLのみならず多くのデータベース・ソフトで採用されています。
先ず、MySQLを使って「SQL」言語を取得し、データベースを作成しましょう。

ユーザの作成

初めに、MySQLにユーザを作成します。
MySQLでは、管理者の他にユーザを作成し、ダータベースをユーザ毎に分けて管理出来ます。
ユーザの作成は、MS-DOSで次の様に行います。

C:\Documents and Settings\駒ヶ嶺三四郎>cd D:\mysql\bin

D\:mysql\bin>mysqladmin -u ユーザ名 password "パスワード"

D\:mysql\bin>
例: mysqladmin -u user password "1234"

MySQLでのデータベースの管理

1件分のデータの集まりをレコードと言い、レコードが集まった表をテーブルと言います。
MySQLでは、更に、関連するテーブルを幾つか集めてデータベースを作ります。
MySQLは、複数のデータベースを管理出来るツールです。
MySQLに関する操作は、コマンドプロンプトで行えます。

SQLのコマンド

SQL文は、データベースを操作する為に標準化された言語です。
MySQLを初め、主要なデータベースの殆どは、SQLをサポートしていますので、どのデータベースにも対応出来るプログラムを書けます。
初めに、MySQLを起動しましょう。
コマンドプロンプトで次の様に行います。

C:\Documents and Settings\駒ヶ嶺三四郎>cd D:\mysql\bin

D\:mysql\bin>mysql -u ユーザ名 -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11 to server version: 4.0.18-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>_

データベースの表示

データベースの一覧を表示します。

コマンド: show databases;
mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
3 rows in set(0.00 sec)

mysql>

MySQLに対するコマンドは、最後に「;」を入力します。
又、MySQLではユーザを作成すると「mysql」と「test」と言う2つのサンプルデータベースを作成します。

新しいデータベースの作成

新しいデータベースを作成し、此から扱うあらゆるデータを格納する枠を作ります。

コマンド: create database データベース名;
mysql> create database yoyaku;
Query OK, 1 row affected(0.00 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| yoyaku   |
| test     |
+----------+
3 rows in set(0.00 sec)

mysql>

データベースの削除

不要になったデータベースを削除します。
此のデータベースに含まれる全てのテーブルと全てのデータが削除されます。

コマンド: drop database データベース名;
mysql> drop database yoyaku;
Query OK, 0 rows affected(0.00 sec)

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

mysql>

データベースの切替

データにアクセスするに当たり、どのデータベース内のデータを使うのか、予め指定します。

コマンド: use データベース名
mysql> use mysql
Database changed
mysql>

テーブルの表示

現在選ばれているデータベース内のテーブルの一覧を表示します。

コマンド: show tables;
mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set(0.00 sec)

mysql>

新しいテーブルの作成

現在選ばれているデータベース内のテーブルの一覧を表示します。

コマンド: create tables テーブル名{
フィールド名1 型 属性
フィールド名2 型 属性
    
:
);

指定出来るデータの型

説明
int 整数
integer
float 浮動小数点数
double
date 日付と時刻
time
datetime
timestamp
char(文字数) 固定長文字列
varchar(文字数) 可変長文字列

属性は、指定する必要の有る時だけ指定します。
指定出来る主な属性は、以下の通りです。

指定出来る属性

属性 説明
null Null値を許可(デフォルト)
not null Null値を未許可
primary key 主キー
auto_increment 自動的に1つずつ増加
mysql> create table test1{
    -> ID int primary key,
    -> pass char(10) not null,
    -> name varchar(20)
    -> );
Quary OK, 0 rows affected(0.06 sec)

mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| test1           |
| user            |
+-----------------+
7 rows in set(0.00 sec)

mysql>

テーブルの表示

指定のテーブルに、どんなフィールドが有り、どんな型や属性が指定されているのかを一覧表に表示します。

コマンド: show columns from テーブル名;
mysql> show columns from test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     |      | PRI | 0       |       |
| pass  | varchar(10) |      |     |         |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set(0.00 sec)

mysql>

テーブルの削除

現在選択されているデータベースの中から指定のテーブルを削除します。

コマンド: drop table テーブル名;
mysql> drop table test1;
Quary OK, 0 rows affected(0.00 sec)

mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set(0.01 sec)

mysql>

レコードの追加

指定のテーブルにレコードを追加します。

コマンド: insert into テーブル名(フィールド名1, フィールド名2, ・・・) values (データ1, データ2, ・・・);
mysql> create table test1{
    -> ID int primary key,
    -> pass char(10) not null,
    -> name varchar(20)
    -> );
Quary OK, 0 rows affected(0.06 sec)

mysql> insert into test1(ID,pass,name) values
->(1234, "aaaaaa", "溝ノ口"); Quary OK, 1 row affected(0.03 sec) mysql> insert into test1(ID,pass,name) values
->(1240, "bbbb", "ミツカン"); Quary OK, 1 row affected(0.03 sec) mysql> insert into test1(ID,pass,name) values
->(1250, "cccc", "コナン"); Quary OK, 1 row affected(0.03 sec) mysql> insert into test1(ID,pass,name) values
->(1260, "dddd", "ブーブ"); Quary OK, 1 row affected(0.03 sec) mysql>

レコードの検索

レコードの中から、特定の条件を満たすレコードだけを抽出して表示します。

コマンド: select フィールド名,フィールド名・・・from テーブル名 where 抽出条件

検索によって得たいフィールド名を列挙します。
全てを得たい時は「*」を指定します。
「WHERE 抽出条件」を省略すると、全てのレコードが抽出されます。
比較する演算子としては下の表の様な物が有ります。

演算子一覧

内容
フィールド名 = キーデータ 一致するデータのみ
フィールド名 < キーデータ キーデータより小さいデータのみ
フィールド名 > キーデータ キーデータより大きいデータのみ
フィールド名 <= キーデータ キーデータ以下のデータのみ
フィールド名 >= キーデータ キーデータ以上のデータのみ
フィールド名 <> キーデータ 一致しないデータのみ
mysql> select * from test1;
+------+--------+---------+
| ID   | pass   | name    |
+------+--------+---------+
| 1234 | aaaaaa | 溝ノ口  |
| 1240 | bbbb   | ミツカン|
| 1250 | cccc   | コナン  |
| 1260 | dddd   | ブーブ  |
+------+--------+---------+
4 rows in set(0.00 sec)

mysql> select * from test1 where ID = 1234;
+------+--------+-------+
| ID   | pass   | name  |
+------+--------+-------+
| 1234 | aaaaaa | 溝ノ口|
+------+--------+-------+
1 row in set(0.01 sec)

mysql> select * from test1 where name = '溝ノ口';
+------+-------+
| ID   | name  |
+------+-------+
| 1234 | 溝ノ口|
+------+-------+
1 row in set(0.00 sec)

mysql>

データの一部が一致しているレコードを検索する時は、検索条件は「like」と「%」又は「_」を組み合わせて指定します。
「%」の部分は、何文字でもどんな文字でも良いと言うワイルドカードです。
又、「_」は、1文字でどんな文字でも良いと言うワイルドカードです。

mysql> select * from test1 where name like '溝%';
+------+--------+-------+
| ID   | pass   | name  |
+------+--------+-------+
| 1234 | aaaaaa | 溝ノ口|
+------+--------+-------+
1 row in set(0.00 sec)

mysql> select * from test1 where pass like '____';
+------+------+---------+
| ID   | pass | name    |
+------+------+---------+
| 1240 | bbbb | ミツカン|
| 1250 | cccc | コナン  |
| 1260 | dddd | ブーブ  |
+------+------+---------+
3 rows in set(0.00 sec)

mysql>

検索する条件に範囲が有る場合には、「between」と「and」を使います。

mysql> select * from test1 where ID between 1230 and 1245;
+------+--------+---------+
| ID   | pass   | name    |
+------+--------+---------+
| 1234 | aaaaaa | 溝ノ口  |
| 1240 | bbbb   | ミツカン|
+------+--------+---------+
2 rows in set(0.00 sec)

mysql>

条件が2つ以上有る場合には、論理演算子を使います。

論理演算子一覧

演算子 説明
AND 全ての条件が「真」であるレコードを検索
OR 条件の中の何れか1つが「真」であるレコードを検索
NOT 条件が「偽」であるレコードを検索
mysql> select * from test1 where ID < 1240 and name like '溝%';
+------+--------+-------+
| ID   | pass   | name  |
+------+--------+-------+
| 1234 | aaaaaa | 溝ノ口|
+------+--------+-------+
1 row in set(0.01 sec)

mysql> select * from test1 where ID > 1240 or name like '溝%';
+------+--------+---------+
| ID   | pass   | name    |
+------+--------+---------+
| 1234 | aaaaaa | 溝ノ口  |
| 1240 | bbbb   | ミツカン|
| 1250 | cccc   | コナン  |
| 1260 | dddd   | ブーブ  |
+------+--------+---------+
4 rows in set(0.00 sec)

mysql> select * from test1 where not(name like'溝%');
+------+------+---------+
| ID   | pass | name    |
+------+------+---------+
| 1240 | bbbb | ミツカン|
| 1250 | cccc | コナン  |
| 1260 | dddd | ブーブ  |
+------+------+---------+
3 rows in set(0.00 sec)

mysql>

レコードの並べ替え

コマンド: select フィールド名,フィールド名・・・from テーブル名 where 抽出条件 order by フィールド名 desc
mysql> select * from test1 order by ID desc;
+------+--------+---------+
| ID   | pass   | name    |
+------+--------+---------+
| 1260 | dddd   | ブーブ  |
| 1250 | cccc   | コナン  |
| 1240 | bbbb   | ミツカン|
| 1234 | aaaaaa | 溝ノ口  |
+------+--------+---------+
4 rows in set(0.02 sec)

mysql> select * from test1 where not(name like '溝%') order by ID desc;
+------+------+---------+
| ID   | pass | name    |
+------+------+---------+
| 1260 | dddd | ブーブ  |
| 1250 | cccc | コナン  |
| 1240 | bbbb | ミツカン|
+------+------+---------+
3 rows in set(0.01 sec)

mysql>

レコードの削除

指定のテーブルから、選ばれたレコードを削除します。

コマンド: delete from テーブル名 where 条件;
mysql> delete from test1 where name = 'ミツカン';
Quary OK, 1 row affected(0.02 sec)

mysql> select * from test1;
+------+--------+-------+
| ID   | pass   | name  |
+------+--------+-------+
| 1234 | aaaaaa | 溝ノ口|
| 1250 | cccc   | コナン|
| 1260 | dddd   | ブーブ|
+------+--------+-------+
3 rows in set(0.00 sec)

mysql>

データの更新

指定のテーブルから選ばれたレコードのデータを更新します。

コマンド: update テーブル名 set フィールド名 where 条件;
mysql> update test1 set pass = 'abcd';
Quary OK, 3 rows affected(0.02 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> select * from test1;
+------+------+-------+
| ID   | pass | name  |
+------+------+-------+
| 1234 | abcd | 溝ノ口|
| 1250 | abcd | コナン|
| 1260 | abcd | ブーブ|
+------+------+-------+
3 rows in set(0.00 sec)

mysql> update test1 set pass = 'abab' where name like '溝%';
Quary OK, 1 row affected(0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from test1;
+------+------+-------+
| ID   | pass | name  |
+------+------+-------+
| 1234 | abab | 溝ノ口|
| 1250 | abcd | コナン|
| 1260 | abcd | ブーブ|
+------+------+-------+
1 row in set(0.00 sec)

mysql>

此でmysqlの基本的な使い方は終了です。
其れでは次節で実際にデータベースを作成してみましょう。

他のファイルからのレコードの挿入

指定のテーブルにレコードを追加します。

コマンド: load data infile "ファイル名のパス" into table テーブル名 fields terminated by "フィールドの区切り文字" lines terminated by "レコードの区切り文字";

CSVファイルの例

mysql> load data infile "C:javasrc/yoyaku/testData.csv" into table test1 fields terminated by", "lines terminated by "\r\n";
Quary OK, 2 rows affected(0.05 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

mysql>

ファイルの内容(testData.csv)

1234, aaaaaa, 溝ノ口
1240, bbbb, ミツカン
1250, cccc, コナン
1260, dddd, ブーブ
1270, cccc, ワカメ
1280, cccd, クッパ

戻る