17
Formal Method Group IS-FMG, T,I,T, All Rights Reserved, 2008 データベース理論入門 November 13, 2008 担当:飯島淳一 参考 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か 実体-関連モデル(問題) リレーショナルデータモデル(問題と小テスト) 関係代数(小テスト) 見える化(visualization3 ビジネス 情報 行為 (ビジネスにおける活動) 「もの」と「こと」 写像 情報システム 鏡像として 現実世界を把握 意思決定 早く、速く Mierukais identifying problems and bringing them to the foreground. http://www.toyota.co.jp/en/news/06/0101.html Formal Method Group IS-FMG, T,I,T, All Rights Reserved, 2008 データベースとは何か DBMS OS DB APLプログラム エンドユーザ

見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

Formal Method GroupIS-FMG, T,I,T, All Rights Reserved, 2008

データベース理論入門

November 13, 2008担当:飯島淳一

参考増永良文、「リレーショナルデータベース入門」、サイエンス社、2002.

きょうのポイント

データベースと何か

実体-関連モデル(問題)

リレーショナルデータモデル(問題と小テスト)

関係代数(小テスト)

見える化(visualization)

3

ビジネス

情報

行為(ビジネスにおける活動)

「もの」と「こと」

写像

情報システム

鏡像として現実世界を把握

意思決定

早く、速く

“Mieruka” is identifying problems and bringing them to the foreground.

http://www.toyota.co.jp/en/news/06/0101.html Formal Method GroupIS-FMG, T,I,T, All Rights Reserved, 2008

データベースとは何か

DBMS

OS

DB

APLプログラム エンドユーザ

Page 2: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

データと情報

処理

(選択・加工)データ 情報

関心・評価基準

意味付与

データベースとは

DBMS

OS

DB

APLプログラム エンドユーザ

ファイルとDBの違いファイル:APLに付随したデータ群データベース:APLと切り離したデータ群

データの一貫性アクセス権限機密保護

データベースの歴史

1963年 IDS(Integrated Data Store)1960年代 CODASYL(the Conference on Data

Systems Language)の活動

1971年 ネットワークデータモデルの提案

1970年代 E,F,Coddによるリレーショナルデータ

モデルの提案

1980年代 RDBシステムの実用化

階層データモデルの提案

1990年代 オブジェクト指向DBシステム

データモデル

概念モデル実世界のデータ構造と制約の記述

1976年にPeter Chenによって提案された実体-関連(ER)モデルが代表的

対象を実体、関連、属性で記述

論理モデル管理可能な表現

データモデル

リレーショナル(関係)型

ネットワーク型

ヒエラルキカル(階層)型

オブジェクト指向型

実世界 概念モデル

論理モデル

Page 3: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

Formal Method GroupIS-FMG, T,I,T, All Rights Reserved, 2008

実体ー関連モデル

教員 学生

科目

教員名

職種

給与

学籍番号

学生名

住所

担当 履修

得点

科目名

単位数

1 M

N N

実体-関連モデル

実世界を実体(entity)と実体間の関連(relationship)として認識することによって得られるモデル

「学生のA君」という具体的な実体ではなく、「学生」という実体型(entity type)として、また「A君が情報シ

ステム基礎実験という授業を申告している」という具体的な関連ではなく、「申告する」という関連型(relation type)として認識

各々はそれぞれを特徴付ける属性(attribute)を持つ

属性の中でその実体を唯一に識別できる属性集合で極小なものを主キーと呼ぶ、

実体-関連(ER)モデルの例

教員 学生

科目

教員名

職種

給与

学籍番号

学生名

住所

担当 履修

得点

科目名

単位数

1 M

N N多重度1:1(一対一)1:N(一対多)N:1(多対一)M:N(多対多

問題1

身の回りの実世界から、諸君が関心を持っている対象に注目することにより、2つの実体(各実体の属性は、3つ程度)とその間の一つの関連(関連の属性は、1つ程度)を抽出し、

実体-関連モデルとして表現せよ。

Page 4: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

Formal Method GroupIS-FMG, T,I,T, All Rights Reserved, 2008

リレーショナルデータモデル

商品 納品

商品番号 商品名 定価 商品番号 顧客番号 納品数量

G1 テレビ 198,000 G1 C1 3

G2 洗濯機 59,800 G1 C2 10

G3 テレビ 98,000 G2 C2 5

G2 C3 10

G3 C3 2

顧客

顧客番号 顧客名

C1 A商店

C2 Bマート

C3 C社

リレーション

ドメイン(domain):定義域、集合、一般にDiで表記

直積(Cartesian Product):D=D1×・・・×Dnリレーション(関係)R:D1,・・・,Dn上の関係とは、直積D1×・・・×Dnの部分集合(以降では有限集合について考える)

リレーションRのタプル(tuple):Rの要素

リレーションRの濃度(cardinality):Rの要素数

リレーションRの次数(degree):Rが定義されている直積を構成するドメイン数

次数1 単項

次数n n項

リレーションはテーブル表示が可能

問題2

D1={1,2}, D2={a,b,c}, D3=D1とするとき、この上の3項関係Rの例を作れ。

Rの濃度は何か?

代表的なタプルをひとつあげよ?

属性名とリレーション名

データの解釈はリレーションの設計時に決定している。

各列(カラム)のデータの属性を属性名と呼び、リレーションにも名前(リレーション名)をつける。

たとえば、D1={x|xは人名},D2=INTEGERとし、R={(太郎,25),(一郎,30),(花子,26),(桃子,22)}とするとき、Rの第1カラムの属性名は“名前”であり、第2カラムの属性名は“年令”であると考えることができる。また、このリレーション名を“友人”と考えることができる。

リレーションR⊂D1×・・・×Dnの属性名をA1,…,Anとするとき、dom(Ai)=Diで表す。

Page 5: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

リレーションスキーマとインスタンス

具体的なテーブルの中身としてのタプルは、変わりうるが、リレーション名や属性名は不変と考えられる。

そこで、これらをまとめて、リレーションスキーマ(relation schema)と呼び、ある時点で

の具体的なテーブルをインスタンスと呼ぶ。

たとえば、友人(名前,年齢)は2つの属性を持つリレーションスキーマであり、先のRはその

インスタンスである。

ERモデルからRDBスキーマへの変換

実体型の変換

E(K,A1,…,Am)を実体型とする。ただし、Kは主キーである。このとき、EはリレーションスキーマRE(K,A1,…,Am)に変換される。

関連型の変換1対1関連型

1対多関連型

多対1関連型

多対多関連型

主キー

候補キー(candidate key):リレーションのタプルを識別できる属性(unique identifier))の組の中で、極小(minimal)となるもの。

候補キーの中で、空値(null value)を取らないものをひとつ選んで、それを主キー(primary key)と呼ぶ。

リレーションスキーマでは、下線を引いて主キーを表す:

R(・・・,Ak1,・・・,Ak2,・・・,Akm,・・・)

社員

社員番号 社員名 給与 所属 健保番号

0650 鈴木一郎 50 K55 80596

1508 浜崎アユ 40 K41 81403

0231 宇田ひかる 60 K41 80201

2034 鈴木一郎 40 K55 81998

社員(社員番号,社員名,給与,所属,健保番号)

例:リレーションスキーマと主キー

例:主キー

社員

社員番号 社員名 給与 所属 健保番号

0650 鈴木一郎 50 K55 80596

1508 浜崎アユ 40 K41 81403

0231 宇田ひかる 60 K41 80201

2034 鈴木一郎 40 K55 81998

•社員名は候補キー?•社員番号は候補キー?

社員(社員番号,社員名,給与,所属,健保番号)

Page 6: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

外部キー

社員(社員番号、社員名、給与、所属)と部門(部門番号、部門名、部門長)を考えるとき、社員の所属は、必ず部門の主キーである部門番号の値として出現するし、部門の部門長は必ず社員の主キーである社員番号の値として出現する。

このとき、所属は部門の、部門長は社員の外部キーであると呼ぶ。

形式的には、2つのリレーションスキーマR(A1,…,Am), S(B1,…,Bn)において、AiがSの外部キーであるとは、R,Sを各々R,Sの任意のインスタンス、tをRの任意のタプルとするとき、Sのあるタプルuが存在して、u[B1]=t[Ai]となっていることである。

1対1関連型

R(C1,…,Cp)を2つの実体型EL(K,A1,…,Am)とER(H,B1,…,Bn)の1対1関連型とする。このとき、RはリレーションスキーマRR(K,H,C1,…,Cp)あるいはRR’(K,H,C1,…,Cp)に変換される。このとき、KあるいはHは各々EL,ERの主

キーと外部キーとなる。

EL

K

A1

A2

ER

H

B

RC1

1

1

RR

K H C1

RR’

K H C1

1対多関連型

R(C1,…,Cp)を2つの実体型EL(K,A1,…,Am)とER(H,B1,…,Bn)の1対多関連型とする。このとき、RはリレーションスキーマRR(K,H,C1,…,Cp)に変換され、Hは主キーとなる。

このとき、HはERの外部キーともなる。

EL

K

A1

A2

ER

H

B

RC1

1

N

RR

K H C1

多対1関連型

R(C1,…,Cp)を2つの実体型EL(K,A1,…,Am)とER(H,B1,…,Bn)の多対1関連型とする。このとき、RはリレーションスキーマRR(K,H,C1,…,Cp)に変換され、Kが主キーとなる。

このとき、KはELの外部キーともなる。

EL

K

A1

A2

ER

H

B

RC1

N

1

RR

K H C1

Page 7: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

多対多関連型

R(C1,…,Cp)を2つの実体型EL(K,A1,…,Am)とER(H,B1,…,Bn)の多対多関連型とする。このとき、RはリレーションスキーマRR(K,H,C1,…,Cp)に変換され、{K,H}は主キーとなる。

このとき、HとKは各々EL,ERの外部キーとなる。

EL

K

A1

A2

ER

H

B

RC1

M

N

RR

K H C1

例:ERからRDBスキーマへの変換

学生

学籍番号 学生名 住所

履修

学籍番号 科目名 得点

科目

科目名 単位数

学生

学籍番号

学生名

住所

科目科目名

単位数

履修得点

外部キー

外部キー

M

N

Formal Method GroupIS-FMG, T,I,T, All Rights Reserved, 2008

関係代数

リレーションスキーマのインスタンスは、リレーション、すなわ

ち、数学的関係である。数学的関係は、集合の直積の部分集

合である。よって、集合演算などの代数演算が可能となる。

関係データ操作言語の基本概念

データ操作言語(DML-Data Manipulation Language)ユーザの要求

RDBに質問(query)をして、結果を求める。

RDBを更新する。

28

RDB ユーザDML

Page 8: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

関係代数

標準に用いられる4つの集合演算

和(union)差(difference)積(intersection):差で実現可能

直積(product)関係代数固有の4つの演算

射影(projection)選択(selection)結合(join) (自然結合) :直積と選択で実現可能

商(quotient):直積、射影、差で実現可能

29

和(union)

定義

R∪S={t | t∈R ∨ t∈S}例

30

テニス部員∪サッカー部員

氏名 所属 連絡先

鈴木一郎 K55 5643-3192

浜崎アユ K41 5591-0585

別所幸治 K55 5274-5201

宇田ひかる K41 5989-3201

差(difference)

定義

R-S={t | t∈R ∧ t∈S}例

テニス部員-サッカー部員

氏名 所属 連絡先

浜崎アユ K41 5591-0585

別所幸治 K55 5274-5201

31

直積(product)R(A1,…,An),S(B1,…,Bm)に対し、RとSの直積を次のように定める:

R×S={(r,s) | r∈R ∧ s∈S }

32

社員

社員番号 氏名 給与 所属

0650 鈴木一郎 50 K55

1508 浜崎アユ 40 K41

0231 宇田ひかる 60 K41

2034 別所幸治 40 K55

部門

部門番号 部門名 部門長

K55 データベース 0650

K41 ネットワーク 1508

社員×部門

社員。社員番号 社員。氏名 社員。給与 社員。所属 部門。部門番号 部門。部門名 部門。部門長

0650 鈴木一郎 50 K55 K55 データベース 0650

0650 鈴木一郎 50 K55 K41 ネットワーク 1508

1508 浜崎アユ 40 K41 K55 データベース 0650

1508 浜崎アユ 40 K41 K41 ネットワーク 1508

0231 宇田ひかる 60 K41 K55 データベース 0650

0231 宇田ひかる 60 K41 K41 ネットワーク 1508

2034 別所幸治 40 K55 K55 データベース 0650

2034 別所幸治 40 K55 K41 ネットワーク 1508

Page 9: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

射影(projection)R(A1,…,An)を関係とし、X= {Ai1,…,Aik} ⊂ {A1,…,An}とするとき、RのX上の射影R[X]を次のように定める:

R[X]={u | u∈dom(Ai1)×・・・×dom(Aik)∧(∃t)(t[Ai1]=u[Ai1]∧・・・∧t[Aik]=u[Aik])}

「関係の縦方向への切出し」

33

供給

供給元 部品 供給先

A11 P101 K55

A11 P102 K51

A11 P102 K41

A12 P102 K41

A12 P103 K51

A13 P101 K41

A13 P102 K51

A13 P103 K51

供給[供給元、部品]

供給元 部品

A11 P101

A11 P102

A12 P102

A12 P103

A13 P101

A13 P102

A13 P103

選択(selection)R(A1,…,An)を関係とするとき、属性AiとAjがθ-比較可能であるとは、

1. dom(Ai)=dom(Aj) (ドメインが一致)

2. 任意のタプルtに対して、 t[Ai]θt[Aj]の真偽が常に定まる。

θは具体的には、 >, ≧, =, ≦, <, =とする。

θ-選択演算の定義

R[AiθAj]={ t | t∈R∧t[Ai] θt[Aj]}

34

商品

商品番号 商品名 原価 売価 定価

G110 刺身 600 500 980

G120 豆腐 90 75 120

G130 卵 95 100 140

G140 コーヒー豆 700 860 860

G150 ケーキ 200 250 300

商品[原価>売価]

商品番号 商品名 原価 売価 定価

G110 刺身 600 500 980

G120 豆腐 90 75 120

Page 10: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

1

1

情報システム基礎実験

第5回

データベースの基礎

参考文献:http://www.rfs.jp/sitebuilder/sql/index.html (第4章SQL構文)山田和夫 (著) 『基礎からのPHP』, ソフトバンククリエーティブ(2007) 2

会員番号 氏名 〒 住所 誕生日KU3B005 前原 美紀 260-0855 千葉県千葉市中央区市場町1-1 1928/6/1KU3B008 武田 陽子 910-0005 福井県福井市大手3-17-1 1945/8/18KU3B006 古石 理絵 160-0023 東京都新宿区西新宿2-8-1 1957/1/12KU3B007 下山 美歌子 231-0021 神奈川県横浜市中区日本大通1 1966/11/28KU3B004 豊岡 可織 336-0011 埼玉県浦和市高砂3-15-1 1975/7/31KU3B009 桝岡 由子 420-0853 静岡県静岡市追手町9―6 1976/6/29KU3B001 井上 佑介 310-0011 茨城県水戸市三の丸1-5-38 1941/5/30KU3B003 小田 学 371-0026 群馬県前橋市大手町1-1-1 1961/1/31KU3B010 室内 昌明 460-0001 愛知県名古屋市中区三の丸3-1-2 1963/8/29KU3B002 大槻 隆男 320-0027 栃木県宇都宮市塙田1-1-20 1972/2/4

フィールド(列,性質,プロパティ)

レコード (行)テーブル (表)

用語の説明:テーブル,レコード,フィールド

リレーショナルデータモデルのタブルに対応する

リレーショナルデータモデルのインスタンスに対応する

リレーショナルデータモデルのドメインタブルに対応する

3

用語の説明(SQL,DBMS,ライブラリ)

• DBMS(DataBase Management System) はデータベー

スを管理し、データに対するアクセス要求に応えるソフトウェアで,mySQLも一種のDBMSである。

• SQL(Structured Query Language)はデータベースと会話するための言語だと理解すればよい。SQLを使って,DBMS(テータベース管理システム)に対し,こんなことを伝

えることができる:

– データを格納すべき表の定義

– 複数の表を関連づけるための規約や制約

– データベースに必要な機密保護の宣言

– 表に対するデータの登録・修正・削除

– 表中のデータを検索4

DBMSの仕組み

a3

a2

a1

a3

a2

a1

Table 2

Table 3Table 1

データベースB

a3

a2

a1

a3

a2

a1

Table 2

Table 1

データベースA

DataBase Management System

SQL(Structured Query Language)で会話し,

データの検索,登録,修正などを行う

Page 11: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

2

5

PHPとmySQLの連携

phpプログラム

a3

a2

a1

a3

a2

a1

Table 2

Table 3Table 1

データベースB

a3

a2

a1

a3

a2

a1

Table 2

Table 1

データベースA

mySQLで管理されているデータベース

私はlocalhostにいる matsui というユーザです。

私のパスワードは hideki です。

接続させてください。

$my_con = mysql_connect($hostname,$yourname,$password)

② 接続OKです。

データベースAに接続させてください。

mysql_select_db($db_name,$my_con);

④ 命令○○を実行してください。

mysql_query($query);

⑤ どうもありがとう。仕事が完了しましたので,接続を切って下さい。mysql_close($my_con)

⑥ 接続を切りました。 6

重要なSQL文データベース操作:CREATE DATABASE (データベースの作成),

DROP DATABASE (データベースの削除),USE (データベースを指定),

テーブル操作:CREATE TABLE (テーブルの作成),DROP TABLE (テーブルの削除) ,

データ操作:INSERT (行の挿入),UPDATE (行の更新) ,

DELETE (行の削除)

データ検索、集約:SELECT (行の抽出),FROM,WHERE,ORDER BY,GROUP BY,JOIN

SQLの例

SELECT フィールド名 FROM テーブル名 WHERE 条件文

(指定したテーブルの中から,条件文を満たすレコードを抽出し,指定したフィールドを表示する)

7

USE文で利用するデータベースを宣言

データベースの操作する前に、まず、DBMSに、これからどのデータベース

を利用するかを伝える必要がある。 今後のグループワークを含め、情報システム基礎実験で使うのは 「iskiso」 というデータベースですので、 初に、下記SQL文を実行する必要がある。

USE iskiso;

※ このスライドでは、分かりやすいように、 SQL文予約語は全て大文字で表示していますが、 通常SQL文の予約語の大文字/小文字は区別されません。USE iskiso を実行しても、use iskiso を実行しても、結果が変わりません。

8

CREATE TABLE文:テーブルを作る

CREATE TABLE <テーブル名>(

<カラム名> <型> <オプション>,<カラム名> <型> <オプション>,

…)

MySQLでは、カラム名(列の名前)として、半角英数字及び_ が使えます。(DBMSによっては、日本語が

使える場合もある)

MySQLでよく使うデータ型は:

VARCHAR:可変長文字

INT:32bitの整数型

DATETIME :日時

型は、ソートするときの順番に影響します。例えば、IDというカラムの型をINTと指定すると、ID=2の行がID=12の行の前にくるが、型を VARCHARと指定すると、12が2の前にきます

MySQLでは、以下のオプションを指定できる:

PRIMARY KEY: このカラムは主キーである

NOT NULL: 値が空であってはならない

AUTO_INCREMENT : 自動的な連番とする

Page 12: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

3

9

CREATE TABLEの例

CREATE TABLE IF main_customer (id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(32),age INT,gender INT,prefecture VARCHAR(20),telephone varchar(32),company varchar(64)

)

main_customer

id INT(11)

name VARCHAR(32)

age INT(11)

gender INT(11)

prefecture VARCHAR(20)

telephone VARCHAR(32)

company VARCHAR(64)

main_customer

id INT(11)

name VARCHAR(32)

age INT(11)

gender INT(11)

prefecture VARCHAR(20)

telephone VARCHAR(32)

company VARCHAR(64)

id name age gender prefecture telephone company1 木村尚志 53 1 東京都 03-5324-0000 (有)山田電算2 田中仙市 27 1 千葉県 043-1234-0000(株)テラソフト3 鈴木良美 31 2 千葉県 043-1234-0000(株)テラソフト4 吉田盛朗 25 1 埼玉県 048-1234-0000個人事業主

...

10

INSERT文:行の挿入

例INSERT INTO main_customer (name, age, gender, prefecture, telephone, company) VALUES ('木村尚志',53,'1','東京都','03-5324-0000','(有)山田電算');

INSERT INTO main_customer (name, age, gender, prefecture, telephone, company) VALUES ('田中仙市',27,'1','千葉県','043-1234-0000','(株)テラソフト');

INSERT INTO main_customer (name, age, gender, prefecture, telephone, company) VALUES ('鈴木良美',31,'2','千葉県','043-1234-0000','(株)テラソフト');

INSERT INTO main_customer (name, age, gender, prefecture, telephone, company) VALUES ('吉田盛朗',25,'1','埼玉県','048-1234-0000','個人事業主');

id name age gender prefecture telephone company1 木村尚志 53 1 東京都 03-5324-0000 (有)山田電算2 田中仙市 27 1 千葉県 043-1234-0000(株)テラソフト3 鈴木良美 31 2 千葉県 043-1234-0000(株)テラソフト4 吉田盛朗 25 1 埼玉県 048-1234-0000個人事業主

INSER INTO <テーブル名> ( <カラム名> ) VALUES ( <値> )

11

SELECT文:データの抽出

全顧客の氏名、年齢を抽出する例:

SELECT name, age FROM main_customer;

SELECT <カラム名>, <カラム名>, … FROM <テーブル名> [WHERE節] [GROUP BY節] [HAVING節] [ORDER BY節]

WHERE節でデータを絞り込みORDER BY節で並べ替える

20歳以上で30未満の顧客の氏名、年齢を抽出し、

氏名の昇順、年齢の降順で出力する例:

SELECT name, age FROM main_customerWHERE age >= 20 AND age < 30ORDER BY name ASC, age DESC;

実行すると、2件のデータ

が抽出される

田中仙市 27

吉田盛朗 25

関係代数の「選択(selection)に対応する」

12

MySQLを使ってみる

Page 13: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

4

13

[注意] このページは使わない

(誤ってパスワードを変更する恐れがある)

• ハッスルサーバーにログインし、左メニューの[MySQL]をクリックすると左記画面が出ます。

• これは「パスワード変更画面」です。「ログイン画面」ではありません。

• 誤ってパスワードを変更する恐れがあるので、このページを使わないでください。

14

MySQL演習での注意事項

• 他人のデータを誤って変更することがないよう、下記命名ルールに従って、テーブル名をつけて下さい。– 二人一組で演習する際、自分のチーム番号をテーブル名の先頭につけ

てください(例:チーム1が使うテーブルなら、名前を 1test, 1kaikei など

にする)。

– グループワークでMySQLを使う際、0に続くグループの番号をテーブル名の先頭につけてください。 (例: 4班「挽きたて微糖」のテーブルなら、名前を 04test, 04kaikei などにする)

• SQL文を実行するとき、細心の注意を払って、テーブル名をよく

確認しましょう。

• グループワークの際、データが壊れてもすぐ復旧できるよう、バックアップをしっかりやりましょう。

15

演習の準備• TeraPadを起動し、ファイル memo.txt を作って

ください。これから実行するSQLはこのファイルの中で編集します。今後、グループワークでSQLを実行する場合も、必ず、テキストファイルとして編集し、実行したSQL文をファイルの中で保存してく

ださい。(そうすれば、データが壊れた場合、迅速に復旧できます。)

• utf-8 がガジェットの標準的な文字コードです。これから作るデータの文字コードを全てutf-8にしま

しょう。そのために、「文字/改行コード指定保存」の操作をし、文字コードをUTF-8に変更してく

ださい。

• サーバ上のMySQLを操作するためのWebページのURLは以下です。ブラウザを起動し、この

ページにアクセスし、ブックマークしておく (念のために、演習時に常にもってくる「備忘録」にも、このURLをメモしてください。)

https://www.hustle.ne.jp/phpmyadmin/16

MySQL操作画面(phpMyAdmin)へのログイン手順

1. 一番上の[言語欄]を「日本語-Japanese (utf-8)」に変更する

2. [サーバの選択]欄を 「mysql3.naid.jp 」に変更する

3. ホワイトボードに書かれているID、パスワードを入力する

4. [実行する] をクリック

※phpMyAdminにログイン後

30分以上操作がないと

自動的にphpMyAdminから

ログアウトされる。その場合、

再度ログインしてから使ってください。

Page 14: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

5

17

ログインできたら、SQLアイコンをクリックし、SQLタブで、USE iskiso; を入力し、実行してください。

18

CREATE TABLE文を使ってみる下記SQL文を入力し、性別を管理するテーブル「gender」を作ろう。(TeraPadでSQL文を編集し、コピー・ペーストを使って、phpMyAdminで実行してください。)※genderの前に、二人一組演習のチーム番号をつけてください。

例: チーム1の場合、テーブル名は 1gender

CREATE TABLE 1gender(

id INT PRIMARY KEY,name VARCHAR(32)

)

チーム番号

gendergender

id INT(11)

name VARCHAR(32)

id INT(11)

name VARCHAR(32)

main_customer

id INT(11)

name VARCHAR(32)

age INT(11)

gender INT(11)

prefecture VARCHAR(20)

telephone VARCHAR(32)

company VARCHAR(64)

main_customer

id INT(11)

name VARCHAR(32)

age INT(11)

gender INT(11)

prefecture VARCHAR(20)

telephone VARCHAR(32)

company VARCHAR(64)

gender = id

19

CREATE TABLE文の実行画面

20

CREATE TABLE文実行結果画面

SQLが正常に実行したかどう

かが表示される。

Page 15: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

6

21

SQL文が正常に実行されなかった場合

エラーのときは、MySQLからのメッセージをよく読み、理解したうえで、SQL文を見直し、[戻る] を使って前の画面に戻り、修正したSQL文を再度実行する。

22

下記INSERT文を実行してみよう

(テーブル名は各自のものに変えてください)

INSERT INTO 1gender (id,name) VALUES (1, '男性');INSERT INTO 1gender (id,name) VALUES (2, '女性');

チーム番号

23

INSERT文の実行結果

INSERT 文、DELETE文、UPDATE文を実行

すると、変更された行数も結果として表示される。

24

SELECT文を使ってみよう20歳以上で30未満の顧客の氏名、年齢を抽出し、氏名の昇順、年齢の降順で出力するSQL文を実行してみてください。

SELECT name, age FROM main_customerWHERE age >= 20 AND age < 30ORDER BY name ASC, age DESC;

phpMyAdminでは、データベースか

ら先に出力された行が下に表示されるので、指定した順番の逆のようにみえる。

Page 16: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

7

25

GUIを使うSQL文実行結果画面で、データベースの構造をGUIで確認することもできる。

左メニュにあるテーブル名をクリックしてみよう。

GUI画面で、[表示]タブを使うと、テーブルの中身のデータを見れる。また、構造タブ

を使うと、カラムの一覧を見れる。

26

PHPとmySQLの連結

データベースにアクセスする

PHPプログラムを作ってみよう

27

解説:ログイン

$conn = mysql_connect("mysql3.naid.jp","iskiso","w93f311") or die ('DB Connection Error= '. mysql_error());

mysql_query("SET NAMES 'urf-8'", $conn);

これは、phpMyAdminでのログイン操作に相

当する部分。

ログインが成功すると、 $conn を使って、

データベース操作を行える。

28

解説:データベース操作

mysql_select_db("iskiso", $conn);

これは、phpMyAdminで USE iskiso; 文を実

行するのに相当する部分。

$sql = "SELECT * FROM main_customer";$rs = mysql_query($sql, $conn);

これは、phpMyAdminでクエリーを実行する

のに相当する部分。

実行した結果が$rs に代入される

1 木村尚志 53 1 東京都 03-5324-0000 (有)山田電算2 田中仙市 27 1 千葉県 043-1234-0000(株)テラソフト3 鈴木良美 31 2 千葉県 043-1234-0000(株)テラソフト4 吉田盛朗 25 1 埼玉県 048-1234-0000個人事業主

bj
テキストボックス
誤:urf-8 正:utf-8
Page 17: 見える化(visualization · 11/13/2008  · 増永良文、「リレーショナルデータベース入門」、サイエンス社、2002. きょうのポイント データベースと何か

8

29

解説:結果表示

echo "<TABLE border=1>";while ($row = mysql_fetch_assoc($rs)) {

echo "<TR>";foreach ($row as $key => $val){

echo "<TD>$key=<b>$val</b></TD>";}echo "</TR>";

}echo "</TABLE>";

これは、$rs に代入されたデータをHTML形式で表示する部分。

1 木村尚志 53 1 東京都 03-5324-0000 (有)山田電算2 田中仙市 27 1 千葉県 043-1234-0000(株)テラソフト3 鈴木良美 31 2 千葉県 043-1234-0000(株)テラソフト4 吉田盛朗 25 1 埼玉県 048-1234-0000個人事業主

<TABLE border=1><TBODY><TR>

<TD>id=<B>1</B></TD><TD>name=<B>木村尚志</B></TD><TD>age=<B>53</B></TD><TD>gender=<B>1</B></TD><TD>prefecture=<B>東京都</B></TD><TD>telephone=<B>03-5324-0000</B></TD><TD>company=<B>(有)山田電算</B></TD></TR>

...</TBODY></TABLE> 30

<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><TITLE>MySQL</TITLE></HEAD><BODY><?php$conn = mysql_connect("mysql3.naid.jp","iskiso","w93f311") or die ('DB Connection Error= '. mysql_error());

mysql_query("SET NAMES 'urf-8'", $conn);mysql_select_db("iskiso", $conn);

$sql = "SELECT * FROM main_customer";$rs = mysql_query($sql, $conn);

echo "<TABLE border=1>";while ($row = mysql_fetch_assoc($rs)) {

echo "<TR>";foreach ($row as $key => $val){

echo "<TD>$key=<b>$val</b></TD>";}echo "</TR>";

}echo "</TABLE>";

mysql_close($conn);

?></BODY></HTML>

main_customerの全

テータを表示するmysql-showTable.php

左記PHPプログラムを作り、

サーバ上の自分のフォルダーにアップロードし、実行してみてください。

31

実行結果