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, クッパ

戻る