• 検索結果がありません。

Microsoft PowerPoint - データベース理論.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - データベース理論.pptx"

Copied!
17
0
0

読み込み中.... (全文を見る)

全文

(1)

Formal Method Group IS-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 Group IS-FMG, T,I,T, All Rights Reserved, 2008

データベースとは何か

DBMS

OS DB

(2)

データと情報

処理

(選択・加工)

データ

情報

関心・評価基準

意味付与

データベースとは

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)モデル

が代表的

„

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

†

論理モデル

„

管理可能な表現

„

データモデル

9

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

9

ネットワーク型

9

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

9

オブジェクト指向型

実世界 概念 モデル 論理 モデル

(3)

Formal Method Group IS-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つ程度)を抽出し、

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

(4)

Formal Method Group IS-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):定義域、集合、一般にD

i

で表記

†

直積

(Cartesian Product):D=D

1

×・・・×D

n

†

リレーション

(関係)R:D

1

,・・・,D

n

上の関係とは、

直積D

1

×・・・×D

n

の部分集合(以降では有限集合に

ついて考える)

†

リレーションRの

タプル

(tuple):Rの要素

†

リレーションRの

濃度

(cardinality):Rの要素数

†

リレーションRの

次数

(degree):Rが定義されている

直積を構成するドメイン数

„

次数1 単項

„

次数n n項

†

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

問題

2

†

D

1

={1,2}, D

2

={a,b,c}, D

3

=D

1

とするとき、この

上の3項関係Rの例を作れ。

†

Rの濃度は何か?

†

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

属性名とリレーション名

†

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

る。

†

各列(カラム)のデータの属性を

属性名

と呼び、リ

レーションにも名前(

リレーション名

)をつける。

†

たとえば、D

1

={x|xは人名},D

2

=INTEGERとし、

R={(太郎,25),(一郎,30),(花子,26),(桃子,22)}と

するとき、Rの第1カラムの属性名は“名前”であり、第

2カラムの属性名は“年令”であると考えることができ

る。また、このリレーション名を“友人”と考えることが

できる。

†

リレーションR⊂D

1

×・・・×D

n

の属性名をA

1

,…,A

n

するとき、dom(A

i

)=D

i

で表す。

(5)

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

†

具体的なテーブルの中身としてのタプルは、

変わりうるが、リレーション名や属性名は不変

と考えられる。

†

そこで、これらをまとめて、

リレーションス

キーマ

(relation schema)と呼び、ある時点で

の具体的なテーブルを

インスタンス

と呼ぶ。

†

たとえば、友人(名前,年齢)は2つの属性を持

つリレーションスキーマであり、先のRはその

インスタンスである。

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

†

実体型の変換

E(K,A

1

,…,A

m

)を実体型とする。ただし、Kは

主キーである。このとき、Eはリレーションス

キーマR

E

(K,A

1

,…,A

m

)に変換される。

†

関連型の変換

„

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

•社員名は候補キー?

•社員番号は候補キー?

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

(6)

外部キー

†

社員(社員番号、社員名、給与、所属)と部門(部門

番号、部門名、部門長)を考えるとき、社員の所属は、

必ず部門の主キーである部門番号の値として出現

するし、部門の部門長は必ず社員の主キーである社

員番号の値として出現する。

†

このとき、所属は部門の、部門長は社員の

外部キー

であると呼ぶ。

†

形式的には、2つのリレーションスキーマ

R(A

1

,…,A

m

), S(B

1

,…,B

n

)において、A

i

がSの

外部

キー

であるとは、R,Sを各々R,Sの任意のインスタン

ス、tをRの任意のタプルとするとき、Sのあるタプルu

が存在して、u[B

1

]=t[A

i

]となっていることである。

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 R C1 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 R C1 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 R C1 N 1 RR K H C1

(7)

多対多関連型

† 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 R C1 M N RR K H C1

例:

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

学生

学籍番号

学生名

住所

履修

学籍番号

科目名

得点

科目

科目名

単位数

学生 学籍番号 学生名 住所 科目 科目名 単位数 履修 得点 外部キー 外部キー M N

Formal Method Group IS-FMG, T,I,T, All Rights Reserved, 2008

関係代数

リレーションスキーマのインスタンスは、リレーション、すなわ ち、数学的関係である。数学的関係は、集合の直積の部分集 合である。よって、集合演算などの代数演算が可能となる。

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

†

データ操作言語(DML-Data Manipulation

Language)

†

ユーザの要求

„

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

„

RDBを更新する。

28 RDB DML ユーザ

(8)

関係代数

†

標準に用いられる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

(9)

射影

(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

(10)

1

1

情報システム基礎実験

第5回

データベースの基礎

参考文献: http://www.rfs.jp/sitebuilder/sql/index.html (第4章SQL構文) 山田和夫 (著) 『基礎からのPHP』, ソフトバンククリエーティブ(2007) 2 会員番号 氏名 〒 住所 誕生日 KU3B005 前原 美紀 260-0855 千葉県千葉市中央区市場町1-1 1928/6/1 KU3B008 武田 陽子 910-0005 福井県福井市大手3-17-1 1945/8/18 KU3B006 古石 理絵 160-0023 東京都新宿区西新宿2-8-1 1957/1/12 KU3B007 下山 美歌子 231-0021 神奈川県横浜市中区日本大通1 1966/11/28 KU3B004 豊岡 可織 336-0011 埼玉県浦和市高砂3-15-1 1975/7/31 KU3B009 桝岡 由子 420-0853 静岡県静岡市追手町9―6 1976/6/29 KU3B001 井上 佑介 310-0011 茨城県水戸市三の丸1-5-38 1941/5/30 KU3B003 小田 学 371-0026 群馬県前橋市大手町1-1-1 1961/1/31 KU3B010 室内 昌明 460-0001 愛知県名古屋市中区三の丸3-1-2 1963/8/29 KU3B002 大槻 隆男 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の仕組み

a 3 a 2 a 1 a 3 a 2 a 1 Table 2 Table 3 Table 1 データベースB a 3 a 2 a 1 a 3 a 2 a 1 Table 2 Table 1 データベースA

DataBase Management System

SQL(Structured Query Language)で会話し, データの検索,登録,修正 などを行う

(11)

2

5

PHPとmySQLの連携

phpプログラム a 3 a 2 a 1 a2 a3 a 1 Table 2 Table 3 Table 1 データベースB a 3 a 2 a 1 a 3 a 2 a 1 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 : 自動的な連番とする

(12)

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 company 1 木村尚志 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 company 1 木村尚志 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_customer WHERE age >= 20 AND age < 30 ORDER BY name ASC, age DESC;

実行すると、2件のデータ が抽出される 田中仙市 27 吉田盛朗 25 関係代数の「選択(selection)に対応する」 12

MySQLを使ってみる

(13)

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から ログアウトされる。その場合、 再度ログインしてから使ってください。

(14)

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) ) チーム番号 gender gender 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が正常に実行したかどう かが表示される。

(15)

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_customer

WHERE age >= 20 AND age < 30

ORDER BY name ASC, age DESC;

phpMyAdminでは、データベースか ら先に出力された行が下に表示さ れるので、指定した順番の逆のよう にみえる。

(16)

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個人事業主

誤:

urf-8

正:

utf-8

(17)

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

実行結果

参照

関連したドキュメント

学位授与番号 学位授与年月日 氏名

氏名 小越康宏 生年月日 本籍 学位の種類 学位記番号 学位授与の日付 学位授与の要件 学位授与の題目..

強化 若葉学園との体験交流:年間各自1~2 回実施 新規 並行通園児在籍園との連携:10園訪問実施 継続 保育園との体験交流:年4回実施.

住所」 「氏名」 「電話番号(連絡 先)」等を明記の上、関西学院 大学教務部生涯学習課「 KG 梅田ゼミ」係(〒662‐8501西 宮 市 上ケ原 一 番 町 1 - 1 5

一高 龍司 主な担当科目 現 職 税法.

目名 科名 種名 学名.. 目名 科名

種別 自治体コード 自治体 部署名 実施中① 実施中② 実施中③ 検討中. 選択※ 理由 対象者 具体的内容 対象者 具体的内容 対象者

 履修できる科目は、所属学部で開講する、教育職員免許状取得のために必要な『教科及び