データベース(MySQL)

この内容、あるサイトの解説記事からパクってます。順次更新しないと…

MySQLのインストール

MySQLのダウンロード

MySQLのインストール

  1. たぶん(笑)、以下のようにしてインストールできます。
    $ su
    # rpm -ivh ファイルその1.rpm
    # rpm -ivh ファイルその2.rpm
    以下同様…
  2. 設定ファイルを/etc/にコピーします。
    $ su
    # cp /usr/share/mysql/my-small.cnf /etc/my.cnf
  3. 設定ファイルを編集します。
    # vi /etc/my.cnf
  4. [mysqld]という部分に、以下の内容を書き加えます。
    [mysqld]
    default-character-set=ujis

MySQLの起動

  1. MySQLのサーバが起動しているか確認します。
    $ mysqlshow
  2. もし起動していたら、設定を有効にするためにいったん止めます。
    $ su
    # /etc/init.d/mysql stop
  3. MySQLサーバを起動します。
    # /etc/init.d/mysql start
  4. 管理ユーザー root にパスワードを設定しておきます。
    $ mysqladmin -u root password '管理パスワード'
    $ mysql_install_db

データベースの準備

  1. ユーザーが使うためのデータベースを作っておきます。 ここでは、データベース名を user_db としておきます。
    $ mysqladmin -u root -p create user_db
    Enter password: 管理パスワード

データベースの確認

  1. 現在サーバー上にあるデータベースは、mysqlshowまたは、以下のコマンドで確認できます。
    $ mysql -u root -p
    Enter password: 管理パスワード
    
    mysql> show databases;
    +----------+
    | Database |
    +----------+
    | mysql    |
    | test     |
    | user_db  |
    +----------+
    3 rows in set (0.00 sec)
    
    mysql> exit
    Bye

一般ユーザーの作成

  1. 普段データベースを利用するための一般ユーザーを作ります。 ここでは、ユーザー名を db_user とします。
$ mysql -u root -p
Enter password: 管理パスワード

mysql> grant all on *.* to db_user@localhost identified by 'ユーザパスワード';
mysql> flush privileges;
mysql> exit
Bye

データベースの設計

  1. 郵便番号データベース
  2. 「旧番号, 新番号, 都道府県名, 市区郡町村名, 町村字名」という レコードを持つ郵便番号データベースを作成してみましょう。
  3. yubin_euc.csvをダウンロードします。
  4. 「head yubin_euc.csv」や「tail yubin_euc.csv」というコマンドで内容 を確認してみましょう。
"907-14","907-1432","沖縄県","八重山郡竹富町","古見"
"907-15","907-1543","沖縄県","八重山郡竹富町","崎山"
"907-14","907-1431","沖縄県","八重山郡竹富町","高那"
"907-11","907-1101","沖縄県","八重山郡竹富町","竹富"
"907-14","907-1434","沖縄県","八重山郡竹富町","南風見"
"907-14","907-1433","沖縄県","八重山郡竹富町","南風見仲"
"907-17","907-1751","沖縄県","八重山郡竹富町","波照間"
"907-15","907-1544","沖縄県","八重山郡竹富町","鳩間"
"907-18","907-1800","沖縄県","八重山郡与那国町","以下に掲載がない場合"
"907-18","907-1801","沖縄県","八重山郡与那国町","与那国"
  1. ここから、以下のようなデータベースを作ります。
         旧番号 	新番号 	都道府県名 	市区郡町村名 	町村字名
         060 	060-0041	北海道	札幌市中央区	大通東
         154 	154-0002	東京都	世田谷区	下馬
         468 	468-0039	愛知県	名古屋市天白区	西入町
         907-18	907-1801	沖縄県	八重山郡与那国町	与那国

テーブルの作成

  1. 関係データベースへデータを登録するには、 まずデータの“入れ物”を作らなければなりません。 この“入れ物”のことを「テーブル」(表)と呼びます。
  2. 個々のデータは横一列に行として並びます(レコードという)。 それぞれのレコードには、項目として表の縦の並び(カラムやフィールドという)があります。

テーブルの設計

  1. 今回は、以下のようなテーブルを作ります。 データベースでは、まずテーブルを作ってから、 データを登録していきます。テーブルの名前は zipcode としておきます。
         zipcode
         名称	内容	型	属性
         oldzip	旧番号	text
         newzip	新番号 	text	空欄不可
         pref	都道府県名	text
         city	市区郡町村名	text
         addr	町字名	text	空欄不可
  2. 「型」というのは、そのカラムに入るデータの形式のことで、必ず定義します。
  3. テーブルの設計は、データベース構築の肝です。興味があれば、 「正規化」と呼ばれるデータベースの論理設計手法を勉強してみてください。

データベースに接続する

  1. MySQLはサーバーですので、ユーザーとしてログインして利用します。セットアップの時に作成したアカウント(ユーザ名 db_user)を使います。
$ mysql -u db_user -p
Enter password: ユーザパスワード

mysql> 
  1. 「 mysql> 」という文字を、プロンプト といい、 MySQLが命令を待っている状態です。 この後に、SQL文を打ち込み、データベースを操作します。
  2. まずは、あらかじめ作成したデータベースを選択します(データベース名はuser_db)。
mysql> use user_db;
Database changed
mysql> 
  1. 以上でデータベースが操作できるようになりました。今後、「MySQLにSQL文を発行する」時は、この手順で接続しておきます。なお、切断(終了)する時は以下のようにタイプします。
mysql> exit
Bye

SQLによるテーブル操作

  1. SQLは標準のデータベース言語であり、 MySQLをはじめ AccessからOracleまで、ほとんどのデータベースは SQLによる命令文で動きます。

テーブルを作成する

  1. データベースにテーブルを作ります。 上記の構成でテーブルを作成するには、以下のSQLコマンドをタイプします。
  2. SQL文は、セミコロン(;)を打つまでが1行と認識されます。 例のように、長い命令を途中で改行して入力することが可能です。
mysql> use user_db;

mysql> create table zipcode(
    ->   oldzip text,
    ->   newzip text not null,
    ->   pref text,
    ->   city text,
    ->   addr text not null
    -> );
Query OK, 0 rows affected (0.00 sec)
  1. SQLでコマンドを打つことを、「SQL文を発行する」といいます。
  2. 正しくテーブルが作られたか、確認してみましょう。
mysql> show fields from zipcode;
+---------+------+------+-----+---------+-------+
| Field   | Type | Null | Key | Default | Extra |
+---------+------+------+-----+---------+-------+
| oldzip  | text | YES  |     | NULL    |       |
| newzip  | text |      |     |         |       |
| pref    | text | YES  |     | NULL    |       |
| city    | text | YES  |     | NULL    |       |
| addr    | text |      |     |         |       |
+---------+------+------+-----+---------+-------+
5 rows in set (0.00 sec)
  1. 基本は、MySQLにログイン → データベース選択 → テーブル名を指定して作業 という流れとなります。

(テーブルの削除のしかた)

  1. テーブルの削除方法
    mysql> drop table zipcode;
  1. データを作成する - INSERT文
  2. テーブルにデータ(レコード)を作成するには 「インサート(INSERT)文」を使います。
mysql> insert into zipcode
    ->   (oldzip,newzip,pref,city,addr)
    -> values('154','154-0002','東京都','世田谷区','下馬');

Query OK, 1 rows affected (0.03 sec)
  1. 同様にして、以下のデータを登録してください。
         旧番号	新番号 	都道府県名 	市区郡町村名 	町村字名
         060 	060-0041	北海道	札幌市中央区	大通東
         154 	154-0002	東京都	世田谷区	下馬
         468 	468-0039	愛知県	名古屋市天白区	西入町
         907-18	907-1801	沖縄県	八重山郡与那国町	与那国

データを表示する - SELECT文

  1. 前項で登録したデータを表示してみます。テーブルからレコードを取り出すには、「セレクト(SELECT)文」を使います。
         【基本構文】 select フィールド名 from テーブル名 ; 
  1. 郵便番号と都道府県のみ選択して表示します。
mysql> select newzip,pref from zipcode;
+----------+--------+
| newzip   | pref   |
+----------+--------+
| 060-0041 | 北海道 |
| 154-0002 | 東京都 |
| 468-0039 | 愛知県 |
| 907-1801 | 沖縄県 |
+----------+--------+
4 rows in set (0.00 sec)
  1. すべてのフィールドを表示する場合は、*記号で代用できます。
mysql> select * from zipcode;

データの一括投入

  1. 郵便番号データは、各県数千件のデータになるので、INSERT文での手作業での登録は現実的ではありません。
  2. そこで一気に流し込みを行ないます。ファイルは、適当な場所に yubin_euc.csv として置いておきます。
mysql> load data infile '/置いてある場所/yubin_euc.csv'
    -> into table zipcode fields terminated by ',';
Query OK, 121622 rows affected (0.78 sec)
Records: 121622 Deleted: 0 Skipped: 0 Warnings: 0
  1. レコードの登録件数は、以下のSQLコマンドで確認できます。
mysql> select count(*) from zipcode;
+----------+
| count(*) |
+----------+
| 121622   |
+----------+
1 row in set (0.00 sec)

データの検索

  1. テーブル操作のSQL文を使ってみます。データベースの肝の部分です。 あらかじめMySQLにログインしてからデータベースを選択しておいてください。

データを検索する - WHERE句

  1. テーブルからデータ(レコード)を検索するには 「セレクト(SELECT)文」を使います。そこにWHERE句で条件文をつけると、 条件にマッチするデータのみ表示できます。
         【基本構文】 select フィールド名 from テーブル名 where 条件式 ; 
     複数の行に分けて書くこともできます。
         select フィールド名
         from テーブル名
         where 条件式 ; 
  1. 古い郵便番号が「468」の、すべてのフィールドを表示する。
    select * from zipcode where oldzip='468' ;
  1. 市区名が「世田谷区」の、新番号と町村名を表示する。
    select newzip,addr
    from zipcode
    where city='世田谷区' ;
  1. 以下のようにすると、条件にマッチするレコードの件数が分かります。
select count(*)
from zipcode
where pref='鳥取県' ;
  1. 以下のように「リミット(LIMIT)句」を使うと、表示する件数を限定できます。 県名が「鳥取県」の、すべてのフィールドを、50件表示する。
select *
from zipcode
where pref='鳥取県'
limit 50;

ちょっと高度な検索

  1. 都道府県名が「滋賀県」 かつ 市区名が「草津市」
    select *
    from zipcode
    where pref='滋賀県' && city='草津市' ;
  1. 市区郡町村名が「渋谷区」 または 「新宿区」
    select *
    from zipcode
    where city='渋谷区' || city='新宿区' ;
  1. 市区郡町村名に「日高」が含まれる(likeは文字列比較、%はワイルドカード)
    select *
    from zipcode
    where city like '%日高%';

応用問題

  1. 「東京都町田市」の郵便番号の一覧を検索しなさい。
  2. 「東京都町田市玉川学園」の郵便番号を検索しなさい。
  3. 旧郵便番号が「223」だった地区の住所を検索しなさい。
  4. 町字名(addr)が、「日吉町」である地区の一覧を検索しなさい。
  5. 住所のどこかに「中田」の入っている地名の一覧を検索しなさい。
  6. 時間のあまった人は自由課題。適当な検索の例題を考えてみて。
  1. 問題を解いて結果を確認したら、SQL文をメールで送ってください。 おしまい。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS