MySQLの使い方 (2003.09.09)

目次


ダウンロードからクライアントの起動まで

  1. ダウンロード

    MySQLの最新版のダウンロードページ http://www.mysql.com/downloads/mysql-3.23.htmlから, Windows版 mysql-3.23.57-win.zip をダウンロードしてくる.

  2. インストール

    解凍するとフォルダができるので, その中のSETUPをダブルクリックすると, インストーラーが起動する. すべて defaultの設定でOK. defaultの設定では, 一連のファイルはC:\mysql以下にインストールされる.

  3. WinMySQLadminのユーザ名とパスワード設定

    最初の再起動時に, WinMySQLadminが起動されてのウィンドウが現れるので, ユーザ名と パスワードを入力する. このパスワードはWinMySQLadminのためのユーザ名と パスワードであって, mysqlの管理者としてのユーザ名とパスワードは別途設定 しなければならない.

    今入力した. ユーザ名とパスワードの情報は, C:\Windows\My.ini に書き加えられる. このファイルは, アンインストールしても削除されないので, アンインストール時には 手動で削除する必要がある.

    タスクバーに信号機のようなWinMySQLadminのアイコンが現れる. WinMySQLadminは, MySQLのさまざまな設定を行うためのアプリケーションである. 右クリックすると メニューがポップアップするので, [Show me]をクリックする. タスクバーに戻すときは 右クリックで, [Hide me]である.

    ちなみに, DBMSのサーバープログラム名は, mysqld-nt.exe で, 既にバックグラウンドで 起動中である. (タスクマネージャで確認してみよ. )

  4. 言語設定

    WinMySQLadminのウィンドウを開いた状態で, my.ini Setup タブをクリックして, [mysqld]セクションと, [mysql]セクションに, 次の1行を追加する. default-character-set=sjis WinMySQLadminを終了して, 再起動する.

  5. PATHの設定

    cygwinの自分のホームディレクトリにある .bashrc に PATH = $PATH:C:\mysql\bin の一行を追加して, cygwinを再起動する. (もちろん, そのかわりにWindows環境変数のPATHを変更してもよい. )

  6. クライアントの起動と終了

    cygwin (あるいは, コマンドプロンプト) を起動して, mysqlで起動する. 終了は quit.


データベースの作成とテーブルの操作

  1. 登録されているデータベースの表示

    % mysql -u root
            
    でmysqlを起動したあと,
    mysql> show databases;
            
    を実行してみましょう.
    +----------+
    | Database |
    +----------+
    | mysql    |
    | test     |
    +----------+
              
    すでに2つのデータベースが登録されていることがわかる.

    上のmysqlというデータベースは, 特別なデータベースで, 他の通常のデータベースに対するアクセスの権限を定めたりする ために, 管理用データベースである. testというデータベースは, 文字通りテスト用のデータベースで, 中身は空である.

  2. データベースの新規作成 (CREATE DATABASE構文)

    mysqladminというコマンドを使う. 一般形は以下の通り.

    % mysqladmin -u root create <データベース名>
                
    例えば, mydb というデータベースを新規に作成するには,
    % mysqladmin -u root create mydb
                
    とする.

    データベースができているかどうかを確認してみよう.

    % mysql -u root
                
    でmysqlを起動したあと,
    mysql> show databases;
    
    を実行すると,
    +----------+
    | Database |
    +----------+
    | mydb     |
    | mysql    |
    | test     |
    +----------+
    
    と表示されるはずである.

  3. データベースの選択

    mysql> use <データベース名>;
    
    で登録されているデータベースの中からこれから実行する操作の 対象となるものを選択できる. 例えば,
    mysql> use mydb;
    
    とすれば, 先ほど作ったmydbが選択される. あるいは, mysql の起動時に操作対象のデータベースを 指定することもできる. 例えば,
    % mysql -u root mydb;
    
    のように.

  4. 表(テーブル)の作成 (CREATE TABLE 構文)

    一つのデータベースは, 1つ以上の表から構成されている. データベースの中の表たちを表示するには, 以下のコマンドを用いる.

    mysql> show tables;
    
    現在は, 表は一つもないはずだから,
    Empty set (0.00 sec)
    
    と表示されるであろう.

    新規に表を作成するためには,

    mysql> create table <テーブル名> (
               <属性名1> <型>,
               <属性名2> <型>,
           .
           .
                  .
               <属性名n> <型>
           );
            
    とする. 例えば, 音楽CDのテーブル cdlist を作るとして, 各データが, アーティスト名 (artist_name), タイトル (title), 発売日 (date), 価格 (price) という属性をもつものとしよう. このときは,
    mysql> create table cdlist (
        -> artist_name char(40),
        -> title       char(40),
        -> date        DATE,
        -> price       int(20)
        -> );
            
    とすればよい. ここで, char(40)は, 長さが高々40であるような文字列であり, int(20)は高々20桁の整数であることを表し, さらに, DATEはmysqlの内部で 定義されている「日付型」である.

  5. テーブルの定義の確認

    もう一度

    mysql> show tables;
            
    を実行してみよう. すると,
    +----------------+
    | Tables_in_mydb |
    +----------------+
    | cdlist         |
    +----------------+
    1 row in set (0.00 sec)
            
    というように, cdlistという表ができていることが分かる.

    さらに, 表の定義の詳細の確認は,

    mysql> describe <テーブル名>;
            
    で行う. 例えば,
    mysql> describe cdlist;
            
    とすれば,
    +-------------+----------+------+-----+---------+-------+
    | Field       | Type     | Null | Key | Default | Extra |
    +-------------+----------+------+-----+---------+-------+
    | artist_name | char(40) | YES  |     | NULL    |       |
    | title       | char(40) | YES  |     | NULL    |       |
    | date        | date     | YES  |     | NULL    |       |
    | price       | int(10)  | YES  |     | NULL    |       |
    +-------------|----------|------+-----+---------+-------+
    4 rows in set (0.02 sec)
            
    と表示される. 今のところは, NullとかKeyなどの属性は気にしないで先に進もう.

  6. テーブルへのレコードの挿入 (LOAD DATA INFILE構文)

    テーブルにレコードを挿入していく方法には, 後で紹介するinsert構文を用いる方法もあるが, 一行一行データを追加していくのも面倒である. ここでは, テキストファイルから一括して複数の行を追加する方法を紹介する. まず, 適当なテキストエディタで

    宇多田ヒカル	traveling	2001-11-28	1100
    嵐	ハダシの未来	2003-09-03	1050
    福山雅治	虹	2003-08-27	1260
    宇多田ヒカル	FINAL DISTANCE	2001-07-25	1100
    宇多田ヒカル	COLORS	2003-01-29	1100
    宇多田ヒカル	Movin' on without you	1999-02-17	1020
    宇多田ヒカル	Automatic	1998-12-09	1020
    宇多田ヒカル	Automatic	1998-12-09	1020
    宇多田ヒカル	First Love	1998-12-09	1020
    モーニング娘	モーニングコーヒー	1998-01-28	NULL
    モーニング娘	恋のダンスサイト	2000-01-26	NULL
    モーニング娘	恋愛レボリューション21	2000-12-13	NULL
    モーニング娘	LOVEマシーン	1999-09-09	NULL
    モーニング娘	ハッピーサマーウェディング	2000-05-17	NULL
    モーニング娘	抱いてHOLD ON ME	1998-09-09	NULL
            
    というような内容のファイルを作成し, 例えばdata.txtという名前で保存する. (ここから, ダウンロードしてもよい. ) 列と列の間はtabで区切る.
    mysql> load data local infile "data.txt" into table cdlist;
            
    で, data.txtの内容がテーブルcdlistに読み込まれる. ただし, この load data local ... というコマンドはセキュリティ上の 理由から最新のヴァージョンでは, デフォルトでは使用できないようになっている. 一旦mysqlを終了してから,
    % mysql --local-infile=1 -u root mydb
            
    のように --local-infile =1 というオプションを追加して起動してから, load data local 文を実行してみよう.

  7. テーブルの内容の表示 (SELECT構文)

    先ほどのファイルが正しく読み込まれているかどうかを確認してみよう. select構文を用いる.

    mysql> select * from cdlist;
            
    を実行すれば,
    +--------------+----------------------------+------------+-------+
    | artist_name  | title                      | date       | price |
    +--------------+----------------------------+------------+-------+
    | モーニング娘 | 抱いてHOLD ON ME           | 1998-09-09 |     0 |
    | モーニング娘 | ハッピーサマーウェディング | 2000-05-17 |     0 |
    | モーニング娘 | LOVEマシーン               | 1999-09-09 |     0 |
    | モーニング娘 | 恋愛レボリューション21     | 2000-12-13 |     0 |
    | モーニング娘 | 恋のダンスサイト           | 2000-01-26 |     0 |
    | モーニング娘 | モーニングコーヒー         | 1998-01-28 |     0 |
    | 宇多田ヒカル | First Love                 | 1998-12-09 |  1020 |
    | 宇多田ヒカル | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル | Movin' on without you      | 1999-02-17 |  1020 |
    | 宇多田ヒカル | COLORS                     | 2003-01-29 |  1100 |
    | 宇多田ヒカル | FINAL DISTANCE             | 2001-07-25 |  1100 |
    | 福山雅治     | 虹                         | 2003-08-27 |  1260 |
    | 嵐           | ハダシの未来               | 2003-09-03 |  1050 |
    | 宇多田ヒカル | traveling                  | 2001-11-28 |  1100 |
    +--------------+----------------------------+------------+-------+
    15 rows in set (0.00 sec)
            
    というような結果を得るであろう.

  8. レコードの挿入 (INSERT構文)

    テーブルへレコードを一件挿入するには,

    mysql> insert into <テーブル名>
        -> values(属性1の値, 属性2の値, ... , B0@-nの値);
            
    という文を用いる. 例えば,
    mysql> insert into cdlist
        -> values('Ziggy Stardust','David Bowie','1972-01-01',NULL);
            
    を実行すれば,
    Query OK, 1 row affected (0.00 sec)
            
    という結果を得る.

    実際に, この挿入が行なわれたことを確認してみよう.

    mysql> select * from cdlist;
            
    を実行すれば, 下のような結果が得られるであろう.
    +----------------+----------------------------+------------+-------+
    | artist_name    | title                      | date       | price |
    +----------------+----------------------------+------------+-------+
    | Ziggy Stardust | David Bowie                | 1972-01-01 |  NULL |
    | モーニング娘   | 抱いてHOLD ON ME           | 1998-09-09 |     0 |
    | モーニング娘   | ハッピーサマーウェディング | 2000-05-17 |     0 |
    | モーニング娘   | LOVEマシーン               | 1999-09-09 |     0 |
    | モーニング娘   | 恋愛レボリューション21     | 2000-12-13 |     0 |
    | モーニング娘   | 恋のダンスサイト           | 2000-01-26 |     0 |
    | モーニング娘   | モーニングコーヒー         | 1998-01-28 |     0 |
    | 宇多田ヒカル   | First Love                 | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Movin' on without you      | 1999-02-17 |  1020 |
    | 宇多田ヒカル   | COLORS                     | 2003-01-29 |  1100 |
    | 宇多田ヒカル   | FINAL DISTANCE             | 2001-07-25 |  1100 |
    | 福山雅治       | 虹                         | 2003-08-27 |  1260 |
    | 嵐             | ハダシの未来               | 2003-09-03 |  1050 |
    | 宇多田ヒカル   | traveling                  | 2001-11-28 |  1100 |
    +----------------+----------------------------+------------+-------+
    16 rows in set (0.00 sec)
            
  9. レコードの削除 (DELETE構文)

    mysql> delete from <テーブル名> where <条件>;
            
    を実行すれば条件を満たすレコードが<テーブル名>から削除される. 全レコードを削除したいのであれば,
    mysql> delete from <テーブル名> where 1;
              
    例えば,
    mysql> delete from cdlist where price=1260;
              
    とすれば福山雅治のレコードが削除される.

    mysql> select * from cdlist;
    +----------------+----------------------------+------------+-------+
    | artist_name    | title                      | date       | price |
    +----------------+----------------------------+------------+-------+
    | Ziggy Stardust | David Bowie                | 1972-01-01 |  NULL |
    | モーニング娘   | 抱いてHOLD ON ME           | 1998-09-09 |     0 |
    | モーニング娘   | ハッピーサマーウェディング | 2000-05-17 |     0 |
    | モーニング娘   | LOVEマシーン               | 1999-09-09 |     0 |
    | モーニング娘   | 恋愛レボリューション21     | 2000-12-13 |     0 |
    | モーニング娘   | 恋のダンスサイト           | 2000-01-26 |     0 |
    | モーニング娘   | モーニングコーヒー         | 1998-01-28 |     0 |
    | 宇多田ヒカル   | First Love                 | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Automatic                  | 1998-12-09 |  1020 |
    | 宇多田ヒカル   | Movin' on without you      | 1999-02-17 |  1020 |
    | 宇多田ヒカル   | COLORS                     | 2003-01-29 |  1100 |
    | 宇多田ヒカル   | FINAL DISTANCE             | 2001-07-25 |  1100 |
    | 嵐             | ハダシの未来               | 2003-09-03 |  1050 |
    | 宇多田ヒカル   | traveling                  | 2001-11-28 |  1100 |
    +----------------+----------------------------+------------+-------+
    15 rows in set (0.00 sec)
              

  10. テーブルの定義の変更 (ALTER TABLE構文)

    後になって, テーブルの定義を変更したくなるかも知れない. テーブルの定義の変更とは例えば, 属性の追加, 属性の削除, 属性名の変更, 属性の型の変更, 等である.

    テーブルの変更の一般的な構文は以下の通りである.

    mysql> alter table <テーブル名> <変更の操作の指定>;
    
    例えば, comment という属性を追加したいときは,
    mysql> alter table cdlist add comment char(300);
    
    また、属性 price を削除したいときは,
    mysql> alter table cdlist drop price;
    
    とする。
  11. レコードの内容の変更 (UPDATE構文)
    mysql> update <テーブル名> set <属性名1>=<属性1の値>, ... , <属性名k>=<属性kの値> where ...; 
    

  12. テーブルの削除 (DROP TABLE構文)

    mysql> drop table <テーブル名>
                

  13. データベースの削除 (DROP DATABASE構文)

    データベースの削除するには,

    mysql> drop database <データベース名>
                


バッチ処理

cygwinのbash窓とかコマンドプロンプトでは, 日本語が入力できないみたいなので, 例えば

mysql> select * from cdlist where artist_name="宇多田ヒカル";
    
みたいなSQL文を発行できない. で, 仕方ないからバッチ処理を行なう.

まず, SQL文を並べたファイルを作る. 例えば,

select * from cdlist where artist_name = "宇多田ヒカル";
select title from cdlist where artist_name = "モーニング娘" and date <= "2001-01-01";
    
このファイルを, 例えば, test1.sql という名前で保存する.

% mysql -u root mydb < test1.sql
    
とすれば,
artist_name     title   date    price
宇多田ヒカル    First Love      1998-12-09      1020
宇多田ヒカル    Automatic       1998-12-09      1020
宇多田ヒカル    Automatic       1998-12-09      1020
宇多田ヒカル    Movin' on without you   1999-02-17      1020
宇多田ヒカル    COLORS  2003-01-29      1100
宇多田ヒカル    FINAL DISTANCE  2001-07-25      1100
宇多田ヒカル    traveling       2001-11-28      1100
title
抱いてHOLD ON ME
ハッピーサマーウェディング
LOVEマシーン
恋愛レボリューション21
恋のダンスサイト
モーニングコーヒー
    
というような出力を得るであろう.


参考文献

  1. アットマーク・アイティ: 連載SQL実践講座 http://www.atmarkit.co.jp/fnetwork/index_index.html#sql.
  2. アットマーク・アイティ: 連載記事 「快速MySQLでデータベースアプリ!」. http://www.atmarkit.co.jp/flinux/index/indexfiles/mysqlindex.html.
  3. テックスコア: SQL http://www.techscore.com/tech/sql/ .
  4. MySQL Reference Manual http://dev.mysql.com/doc/mysql/ja/index.html.

ホームへ戻る
安藤和敏
Last modified: Thu Dec 14 18:58:44 JST 2006