Forml Method Group きょうのポイント データベース理論入門 November 3, 2008 担当 : 飯島淳一 データベースと何か 実体 - 関連モデル ( 問題 ) リレーショナルデータモデル ( 問題と小テスト ) 関係代数 ( 小テスト ) 参考増永良文 リレーショナルデータベース入門 サイエンス社 2002. IS-FMG, T,I,T, All Rights Reserved, 2008 見える化 (visuliztion) 情報システム データベースとは何か 意思決定 もの と こと 情報 早く 速く 写像 鏡像として現実世界を把握 APL プログラム エンドユーザ DBMS 行為 ( ビジネスにおける活動 ) ビジネス DB OS Mieruk is identifying problems nd bringing them to the foreground. http://www.toyot.co.jp/en/news/06/00.html 3 IS-FMG, T,I,T, All Rights Reserved, 2008 Forml Method Group
データと情報 データベースとは 関心 評価基準 APL プログラム エンドユーザ データ 処理 ( 選択 加工 ) 情報 DBMS OS DB 意味付与 ファイルと DB の違いファイル :APL に付随したデータ群データベース :APL と切り離したデータ群 データの一貫性アクセス権限機密保護 データベースの歴史 963 年 IDS(Integrted Dt Store) 960 年代 CODASYL(the Conference on Dt Systems Lnguge) の活動 97 年ネットワークデータモデルの提案 970 年代 E,F,Coddによるリレーショナルデータモデルの提案 980 年代 RDBシステムの実用化階層データモデルの提案 990 年代オブジェクト指向 DBシステム データモデル 概念モデル 実世界のデータ構造と制約の記述 976 年にPeter Chenによって提案された実体 - 関連 (ER) モデルが代表的 対象を実体 関連 属性で記述 論理モデル 管理可能な表現 データモデル 実世界 リレーショナル ( 関係 ) 型 ネットワーク型 ヒエラルキカル ( 階層 ) 型 オブジェクト指向型 概念モデル 論理モデル
Forml Method Group 実体 - 関連モデル 実体ー関連モデル 教員名職種 教員 学生 M 給与 担当 履修 N N 科目名 科目 単位数 学籍番号学生名住所得点 実世界を実体 (entity) と実体間の関連 (reltionship) として認識することによって得られるモデル 学生のA 君 という具体的な実体ではなく 学生 という実体型 (entity type) として また A 君が情報システム基礎実験という授業を申告している という具体的な関連ではなく 申告する という関連型 (reltion type) として認識各々はそれぞれを特徴付ける属性 (ttribute) を持つ 属性の中でその実体を唯一に識別できる属性集合で極小なものを主キーと呼ぶ IS-FMG, T,I,T, All Rights Reserved, 2008 実体 - 関連 (ER) モデルの例 問題 教員名 職種 給与 教員学生 M 担当履修 学籍番号学生名住所 身の回りの実世界から 諸君が関心を持っている対象に注目することにより 2 つの実体 ( 各実体の属性は 3 つ程度 ) とその間の一つの関連 ( 関連の属性は つ程度 ) を抽出し 実体 - 関連モデルとして表現せよ 得点 多重度 :( 一対一 ) :N( 一対多 ) N:( 多対一 ) M:N( 多対多 N 科目 N 科目名 単位数
Forml Method Group リレーション リレーショナルデータモデル 商品 納品 商品番号 商品名 定価 商品番号 顧客番号 納品数量 G テレビ 98,000 G C 3 G2 洗濯機 59,800 G C2 0 G3 テレビ 98,000 G2 C2 5 G2 C3 0 G3 C3 2 顧客 顧客番号 顧客名 C A 商店 C2 Bマート C3 C 社 IS-FMG, T,I,T, All Rights Reserved, 2008 ドメイン (domin): 定義域 集合 一般にD i で表記直積 (Crtesin Product):D=D D n リレーション ( 関係 )R:D,,D n 上の関係とは 直積 D D n の部分集合 ( 以降では有限集合について考える ) リレーションRのタプル (tuple):rの要素リレーションrの濃度 (crdinlity):rの要素数リレーションrの次数 (degree):rが定義されている直積を構成するドメイン数 次数 単項 次数 n n 項リレーションはテーブル表示が可能 問題 2 属性名とリレーション名 D ={,2}, D 2 ={,b,c}, D 3 =D とするとき この上の3 項関係 Rの例を作れ Rの濃度は何か? 代表的なタプルをひとつあげよ? データの解釈はリレーションの設計時に決定している 各列 ( カラム ) のデータの属性を属性名と呼び リレーションにも名前 ( リレーション名 ) をつける たとえば D ={x xは人名 },D 2 =INTEGERとし R={( 太郎,25),( 一郎,30),( 花子,26),( 桃子,22)} とするとき Rの第 カラムの属性名は 名前 であり 第 2カラムの属性名は 年令 であると考えることができる また このリレーション名を 友人 と考えることができる リレーションR D D n の属性名をA,,A n とするとき dom(a i )=D i で表す
リレーションスキーマとインスタンス 具体的なテーブルの中身としてのタプルは 変わりうるが リレーション名や属性名は不変と考えられる そこで これらをまとめて リレーションスキーマ (reltion schem) と呼び ある時点での具体的なテーブルをインスタンスと呼ぶ たとえば 友人 ( 名前, 年齢 ) は2つの属性を持つリレーションスキーマであり 先のRはそのインスタンスである ER モデルから RDB スキーマへの変換 実体型の変換 E(K,A,,A m ) を実体型とする ただし Kは主キーである このとき EはリレーションスキーマR E (K,A,,A m ) に変換される 関連型の変換 対 関連型 対多関連型 多対 関連型 多対多関連型 主キー 例 : 主キー 候補キー (cndidte key): リレーションのタプルを識別できる属性 (unique identifier)) の組の中で 極小 (miniml) となるもの 候補キーの中で 空値 (null vlue) を取らないものをひとつ選んで それを主キー (primry key) と呼ぶ リレーションスキーマでは 下線を引いて主キーを表す : R(,A k,,a k2,,a km, ) 例 : リレーションスキーマと主キー社員 ( 社員番号, 社員名, 給与, 所属, 健保番号 ) 社員 社員番号社員名給与所属健保番号 社員 社員番号 社員名 給与 所属 健保番号 0650 鈴木一郎 50 K55 80596 508 浜崎アユ 40 K4 8403 023 宇田ひかる 60 K4 8020 2034 鈴木一郎 40 K55 8998 社員名は候補キー? 社員番号は候補キー? 0650 鈴木一郎 50 K55 80596 508 浜崎アユ 40 K4 8403 023 宇田ひかる 60 K4 8020 2034 鈴木一郎 40 K55 8998 社員 ( 社員番号, 社員名, 給与, 所属, 健保番号 )
外部キー 対 関連型 社員 ( 社員番号 社員名 給与 所属 ) と部門 ( 部門番号 部門名 部門長 ) を考えるとき 社員の所属は 必ず部門の主キーである部門番号の値として出現するし 部門の部門長は必ず社員の主キーである社員番号の値として出現する このとき 所属は部門の 部門長は社員の外部キーであると呼ぶ 形式的には 2つのリレーションスキーマ R(A,,A m ), S(B,,B n ) において A i がSの外部キーであるとは R,Sを各々 R,Sの任意のインスタンス tをrの任意のタプルとするとき Sのあるタプルu が存在して u[b ]=t[a i ] となっていることである R(C ) を 2 つの実体型 E L (K,A,,A m ) と E R (H,B,,B n ) の 対 関連型とする このとき R はリレーションスキーマ R R (K,H,C ) あるいは R R (K,H,C ) に変換される このとき K あるいは H は各々 E L,E R の主キーと外部キーとなる E L E R R K A A 2 C H B R R K H C R R K H C 対多関連型 多対 関連型 R(C ) を2つの実体型 E L (K,A,,A m ) とE R (H,B,,B n ) の 対多関連型とする このとき RはリレーションスキーマR R (K,H,C ) に変換され H は主キーとなる このとき HはE R の外部キーともなる R(C ) を2つの実体型 E L (K,A,,A m ) とE R (H,B,,B n ) の多対 関連型とする このとき RはリレーションスキーマR R (K,H,C ) に変換され K が主キーとなる このとき KはE L の外部キーともなる K K E L A E L A A 2 R R K H C N A 2 R R K H C R C R C E R N H E R H B B
多対多関連型 例 :ER から RDB スキーマへの変換 R(C ) を2つの実体型 E L (K,A,,A m ) とE R (H,B,,B n ) の多対多関連型とする このとき RはリレーションスキーマR R (K,H,C ) に変換され {K,H} は主キーとなる このとき HとKは各々 E L,E R の外部キーとなる 学生 学籍番号 学生名 学生 学籍番号 学生名 住所 E L M R N E R K A A 2 C H R R K H C M 履修 N 科目 住所得点科目名単位数 履修 外部キー 学籍番号 科目名 得点 外部キー 科目科目名 単位数 B 関係データ操作言語の基本概念 関係代数 データ操作言語 (DML-Dt Mnipultion Lnguge) ユーザの要求 RDBに質問 (query) をして 結果を求める RDBを更新する リレーションスキーマのインスタンスは リレーション すなわ ち 数学的関係である 数学的関係は 集合の直積の部分集 合である よって 集合演算などの代数演算が可能となる RDB DML ユーザ IS-FMG, T,I,T, All Rights Reserved, 2008 Forml Method Group 28
関係代数 標準に用いられる4つの集合演算 和 (union) 差 (difference) 積 (intersection): 差で実現可能 直積 (product) 関係代数固有の4つの演算 射影 (projection) 選択 (selection) 結合 (join) ( 自然結合 ) : 直積と選択で実現可能 商 (quotient): 直積 射影 差で実現可能 和 (union) 定義 R S={t t R t S} 例 テニス部員 サッカー部員氏名 所属 連絡先 鈴木一郎 K55 5643-392 浜崎アユ K4 559-0585 別所幸治 K55 5274-520 宇田ひかる K4 5989-320 29 30 差 (difference) 直積 (product) 定義 R-S={t t R t S} 例 テニス部員 - サッカー部員 R(A,,A n ),S(B,,B m ) に対し RとSの直積を次のように定める : R S={(r,s) r R s S } 社員 社員番号 氏名 給与 所属 部門 0650 鈴木一郎 50 K55 部門番号 部門名 部門長 508 浜崎アユ 40 K4 023 宇田ひかる 60 K4 K55 データベース 0650 2034 別所幸治 40 K55 K4 ネットワーク 508 氏名所属連絡先 浜崎アユ K4 559-0585 別所幸治 K55 5274-520 社員 部門社員 社員番号 社員 氏名 社員 給与 社員 所属 部門 部門番号 部門 部門名 部門 部門長 0650 鈴木一郎 50 K55 K55 データベース 0650 0650 鈴木一郎 50 K55 K4 ネットワーク 508 508 浜崎アユ 40 K4 K55 データベース 0650 508 浜崎アユ 40 K4 K4 ネットワーク 508 023 宇田ひかる 60 K4 K55 データベース 0650 023 宇田ひかる 60 K4 K4 ネットワーク 508 2034 別所幸治 40 K55 K55 データベース 0650 2034 別所幸治 40 K55 K4 ネットワーク 508 3 32
射影 (projection) 選択 (selection) 供給 R(A,,A n ) を関係とし X= {A i,,a ik } {A,,A n } とするとき R の X 上の射影 R[X] を次のように定める : R[X]={u u dom(a i ) dom(a ik ) ( t)(t[a i ]=u[a i ] t[a ik ]=u[a ik ])} 関係の縦方向への切出し R(A,,A n ) を関係とするとき 属性 A i とA j がθ- 比較可能であるとは. dom(a i )=dom(a j ) ( ドメインが一致 ) 2. 任意のタプルtに対して t[a i ]θt[a j ] の真偽が常に定まる θは具体的には >,, =,, <, =とする θ- 選択演算の定義 R[A i θa j ]={ t t R t[a i ] θt[a j ]} 供給元部品供給先 供給 [ 供給元 部品 ] 商品 A P0 K55 A P02 K5 A P02 K4 供給元 A A 部品 P0 P02 商品番号 商品名 原価 売価 定価 G0 刺身 600 500 980 商品 [ 原価 > 売価 ] A2 P02 K4 A2 P03 K5 A3 P0 K4 A3 P02 K5 A3 P03 K5 A2 A2 A3 A3 A3 P02 P03 P0 P02 P03 G20 豆腐 90 75 20 G30 卵 95 00 40 G40 コーヒー豆 700 860 860 G50 ケーキ 200 250 300 商品番号 商品名 原価 売価 定価 G0 刺身 600 500 980 G20 豆腐 90 75 20 33 34
用語の説明 : テーブル, レコード, フィールド 情報システム基礎実験 第 5 回データベースの基礎 レコード ( 行 ) リレーショナルデータモデルのタブルに対応する テーブル ( 表 ) リレーショナルデータモデルのインスタンスに対応する 会員番号 氏名 住所 誕生日 KU3B005 前原美紀 260-0855 千葉県千葉市中央区市場町 - 928/6/ KU3B008 武田陽子 90-0005 福井県福井市大手 3-7- 945/8/8 KU3B006 古石理絵 60-0023 東京都新宿区西新宿 2-8- 957//2 KU3B007 下山美歌子 23-002 神奈川県横浜市中区日本大通 966//28 KU3B004 豊岡可織 336-00 埼玉県浦和市高砂 3-5- 975/7/3 KU3B009 桝岡由子 420-0853 静岡県静岡市追手町 9 6 976/6/29 KU3B00 井上佑介 30-00 茨城県水戸市三の丸 -5-38 94/5/30 KU3B003 小田学 37-0026 群馬県前橋市大手町 -- 96//3 KU3B00 室内昌明 460-000 愛知県名古屋市中区三の丸 3--2 963/8/29 KU3B002 大槻隆男 320-0027 栃木県宇都宮市塙田 --20 972/2/4 参考文献 : http://www.rfs.jp/sitebuilder/sql/index.html ( 第 4 章 SQL 構文 ) フィールド ( 列, 性質, プロパティ ) 山田和夫 ( 著 ) 基礎からのPHP, ソフトバンククリエーティブ (2007) リレーショナルデータモデルのドメインタブルに対応する 2 用語の説明 (SQL,DBMS, ライブラリ ) DBMS(DtBse Mngement System) はデータベースを管理し データに対するアクセス要求に応えるソフトウェアで,mySQL も一種の DBMS である DtBse Mngement System DBMS の仕組み SQL(Structured Query Lnguge) はデータベースと会話するための言語だと理解すればよい SQL を使って, DBMS( テータベース管理システム ) に対し, こんなことを伝えることができる : データを格納すべき表の定義 複数の表を関連づけるための規約や制約 データベースに必要な機密保護の宣言 表に対するデータの登録 修正 削除 表中のデータを検索 3 データベースB Tble Tble 3 2 3 Tble 2 データベースA Tble 2 3 Tble 2 SQL(Structured Query Lnguge) で会話し, データの検索, 登録, 修正などを行う 4
mysql で管理されているデータベース データベース B Tble 3 Tble 2 データベースA Tble Tble 2 2 3 Tble 2 3 PHP と mysql の連携 私はloclhostにいる mtsui というユーザです 私のパスワードは hideki です 接続させてください $my_con = mysql_connect($hostnme,$yournme,$pssword) 2 接続 OK です 3 データベースAに接続させてください mysql_select_db($db_nme,$my_con); 4 命令 を実行してください mysql_query($query); 5 どうもありがとう 仕事が完了しましたので, 接続を切って下さい mysql_close($my_con) php プログラム 重要な 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 条件文 ( 指定したテーブルの中から, 条件文を満たすレコードを抽出し, 指定したフィールドを表示する ) 6 接続を切りました 5 6 USE 文で利用するデータベースを宣言 データベースの操作する前に まず DBMSに これからどのデータベースを利用するかを伝える必要がある 今後のグループワークを含め 情報システム基礎実験で使うのは iskiso というデータベースですので 最初に 下記 SQL 文を実行する必要がある USE iskiso; このスライドでは 分かりやすいように SQL 文予約語は全て大文字で表示していますが 通常 SQL 文の予約語の大文字 / 小文字は区別されません USE iskiso を実行しても use iskiso を実行しても 結果が変わりません 7 CREATE TABLE 文 : テーブルを作る CREATE TABLE < テーブル名 > ( < カラム名 > < 型 > < オプション >, < カラム名 > < 型 > < オプション >, ) MySQLでよく使うデータ型は : VARCHAR: 可変長文字 INT:32bitの整数型 DATETIME : 日時 MySQL では カラム名 ( 列の名前 ) として 半角英数字及び _ が使えます (DBMS によっては 日本語が使える場合もある ) MySQLでは 以下のオプションを指定できる : PRIMARY KEY: このカラムは主キーである NOT NULL: 値が空であってはならない AUTO_INCREMENT : 自動的な連番とする 型は ソートするときの順番に影響します 例えば ID というカラムの型を INT と指定すると ID=2 の行が ID=2 の行の前にくるが 型を VARCHAR と指定すると 2 が 2 の前にきます 8 2
CREATE TABLE の例 INSERT 文 : 行の挿入 CREATE TABLE IF min_customer ( id int() NOT NULL AUTO_INCREMENT PRIMARY KEY, nme, ge INT, min_customer min_customer gender INT, prefecture VARCHAR(20), id id INT() INT() telephone vrchr(32), nme nme compny vrchr(64) ge ge INT() INT() ) id nme ge gender prefecture telephone compny 木村尚志 53 東京都 03-5324-0000 ( 有 ) 山田電算 2 田中仙市 27 千葉県 043-234-0000( 株 ) テラソフト 3 鈴木良美 3 2 千葉県 043-234-0000( 株 ) テラソフト 4 吉田盛朗 25 埼玉県 048-234-0000 個人事業主... gender gender INT() INT() prefecture prefecture VARCHAR(20) VARCHAR(20) telephone telephone compny compny VARCHAR(64) VARCHAR(64) 9 INSER INTO < テーブル名 > ( < カラム名 > ) VALUES ( < 値 > ) 例 INSERT INTO min_customer (nme, ge, gender, prefecture, telephone, compny) VALUES ( ' 木村尚志 ',53,'',' 東京都 ','03-5324-0000','( 有 ) 山田電算 '); INSERT INTO min_customer (nme, ge, gender, prefecture, telephone, compny) VALUES ( ' 田中仙市 ',27,'',' 千葉県 ','043-234-0000','( 株 ) テラソフト '); INSERT INTO min_customer (nme, ge, gender, prefecture, telephone, compny) VALUES ( ' 鈴木良美 ',3,'2',' 千葉県 ','043-234-0000','( 株 ) テラソフト '); INSERT INTO min_customer (nme, ge, gender, prefecture, telephone, compny) VALUES ( ' 吉田盛朗 ',25,'',' 埼玉県 ','048-234-0000',' 個人事業主 '); id nme ge gender prefecture telephone compny 木村尚志 53 東京都 03-5324-0000 ( 有 ) 山田電算 2 田中仙市 27 千葉県 043-234-0000( 株 ) テラソフト 3 鈴木良美 3 2 千葉県 043-234-0000( 株 ) テラソフト 4 吉田盛朗 25 埼玉県 048-234-0000 個人事業主 0 SELECT 文 : データの抽出 関係代数の 選択 (selection) に対応する SELECT < カラム名 >, < カラム名 >, FROM < テーブル名 > [WHERE 節 ] [GROUP BY 節 ] [HAVING 節 ] [ORDER BY 節 ] 全顧客の氏名 年齢を抽出する例 : SELECT nme, ge FROM min_customer; MySQL を使ってみる WHERE 節でデータを絞り込み ORDER BY 節で並べ替える 20 歳以上で 30 未満の顧客の氏名 年齢を抽出し 氏名の昇順 年齢の降順で出力する例 : SELECT nme, ge FROM min_customer WHERE ge >= 20 AND ge < 30 ORDER BY nme ASC, ge DESC; 田中仙市 27 吉田盛朗 25 実行すると 2 件のデータが抽出される 2 3
[ 注意 ] このページは使わない ( 誤ってパスワードを変更する恐れがある ) ハッスルサーバーにログインし 左メニューの [MySQL] をクリックすると左記画面が出ます これは パスワード変更画面 です ログイン画面 ではありません 誤ってパスワードを変更する恐れがあるので このページを使わないでください 3 MySQL 演習での注意事項 他人のデータを誤って変更することがないよう 下記命名ルールに従って テーブル名をつけて下さい 二人一組で演習する際 自分のチーム番号をテーブル名の先頭につけてください ( 例 : チーム が使うテーブルなら 名前を test, kikei などにする ) グループワークで MySQL を使う際 0 に続くグループの番号をテーブル名の先頭につけてください ( 例 : 4 班 挽きたて微糖 のテーブルなら 名前を 04test, 04kikei などにする ) SQL 文を実行するとき 細心の注意を払って テーブル名をよく確認しましょう グループワークの際 データが壊れてもすぐ復旧できるよう バックアップをしっかりやりましょう 4 演習の準備 TerPd を起動し ファイル memo.txt を作ってください これから実行する SQL はこのファイルの中で編集します 今後 グループワークで SQL を実行する場合も 必ず テキストファイルとして編集し 実行した SQL 文をファイルの中で保存してください ( そうすれば データが壊れた場合 迅速に復旧できます ) utf-8 がガジェットの標準的な文字コードです これから作るデータの文字コードを全て utf-8 にしましょう そのために 文字 / 改行コード指定保存 の操作をし 文字コードを UTF-8 に変更してください サーバ上の MySQL を操作するための Web ページの URL は以下です ブラウザを起動し このページにアクセスし ブックマークしておく ( 念のために 演習時に常にもってくる 備忘録 にも この URL をメモしてください ) https://www.hustle.ne.jp/phpmydmin/ 5 MySQL 操作画面 (phpmyadmin) へのログイン手順. 一番上の [ 言語欄 ] を 日本語 -Jpnese (utf-8) に変更する 2. [ サーバの選択 ] 欄を mysql3.nid.jp に変更する 3. ホワイトボードに書かれているID パスワードを入力する 4. [ 実行する ] をクリック phpmyadminにログイン後 30 分以上操作がないと自動的にphpMyAdminからログアウトされる その場合 再度ログインしてから使ってください 6 4
CREATE TABLE 文を使ってみる 下記 SQL 文を入力し 性別を管理するテーブル gender を作ろう (TerPd で SQL 文を編集し コピー ペーストを使って phpmyadmin で実行してください ) gender の前に 二人一組演習のチーム番号をつけてください 例 : チーム の場合 テーブル名は gender CREATE TABLE gender ( id INT PRIMARY KEY, nme ) チーム番号 min_customer min_customer ログインできたら SQL アイコンをクリックし SQL タブで USE iskiso; を入力し 実行してください 7 id id INT() INT() nme nme ge ge INT() INT() gender gender INT() INT() prefecture prefecture VARCHAR(20) VARCHAR(20) telephone telephone compny compny VARCHAR(64) VARCHAR(64) gender = id id id nme nme gender gender INT() INT() 8 CREATE TABLE 文の実行画面 CREATE TABLE 文実行結果画面 SQL が正常に実行したかどうかが表示される 9 20 5
SQL 文が正常に実行されなかった場合 下記 INSERT 文を実行してみよう ( テーブル名は各自のものに変えてください ) INSERT INTO gender (id,nme) VALUES (, ' 男性 '); INSERT INTO gender (id,nme) VALUES (2, ' 女性 '); チーム番号 エラーのときは MySQL からのメッセージをよく読み 理解したうえで SQL 文を見直し [ 戻る ] を使って前の画面に戻り 修正した SQL 文を再度実行する 2 22 INSERT 文の実行結果 SELECT 文を使ってみよう 20 歳以上で 30 未満の顧客の氏名 年齢を抽出し 氏名の昇順 年齢の降順で出力する SQL 文を実行してみてください SELECT nme, ge FROM min_customer WHERE ge >= 20 AND ge < 30 ORDER BY nme ASC, ge DESC; INSERT 文 DELETE 文 UPDATE 文を実行すると 変更された行数も結果として表示される 23 phpmyadminでは データベースから先に出力された行が下に表示されるので 指定した順番の逆のようにみえる 24 6
GUI を使う SQL 文実行結果画面で データベースの構造をGUIで確認することもできる 左メニュにあるテーブル名をクリックしてみよう GUI 画面で [ 表示 ] タブを使うと テーブルの中身のデータを見れる また 構造タブを使うと カラムの一覧を見れる PHP と mysql の連結 データベースにアクセスする PHP プログラムを作ってみよう 25 26 解説 : ログイン 解説 : データベース操作 $conn = mysql_connect("mysql3.nid.jp","iskiso","w93f3") or die ('DB Connection Error= '. mysql_error()); mysql_query("set NAMES 'urf-8'", $conn); これは phpmyadminでのログイン操作に相当する部分 ログインが成功すると $conn を使って データベース操作を行える mysql_select_db("iskiso", $conn); $sql = "SELECT * FROM min_customer"; $rs = mysql_query($sql, $conn); これは phpmyadmin で USE iskiso; 文を実行するのに相当する部分 これは phpmyadminでクエリーを実行するのに相当する部分 実行した結果が $rs に代入される 27 木村尚志 53 東京都 03-5324-0000 ( 有 ) 山田電算 2 田中仙市 27 千葉県 043-234-0000( 株 ) テラソフト 3 鈴木良美 3 2 千葉県 043-234-0000( 株 ) テラソフト 4 吉田盛朗 25 埼玉県 048-234-0000 個人事業主 28 7
解説 : 結果表示 echo "<TABLE border=>"; while ($row = mysql_fetch_ssoc($rs)) { echo "<TR>"; forech ($row s $key => $vl) { echo "<TD>$key=<b>$vl</b></TD>"; } echo "</TR>"; } echo "</TABLE>"; 木村尚志 53 東京都 03-5324-0000 ( 有 ) 山田電算 2 田中仙市 27 千葉県 043-234-0000( 株 ) テラソフト 3 鈴木良美 3 2 千葉県 043-234-0000( 株 ) テラソフト 4 吉田盛朗 25 埼玉県 048-234-0000 個人事業主 これは $rs に代入されたデータを HTML 形式で表示する部分 <HTML><HEAD> <met http-equiv="content-type" content="text/html; chrset=utf-8" /> <TITLE>MySQL</TITLE></HEAD> <BODY> <?php $conn = mysql_connect("mysql3.nid.jp","iskiso","w93f3") or die ('DB Connection Error= '. mysql_error()); mysql_query("set NAMES 'urf-8'", $conn); mysql_select_db("iskiso", $conn); $sql = "SELECT * FROM min_customer"; $rs = mysql_query($sql, $conn); echo "<TABLE border=>"; while ($row = mysql_fetch_ssoc($rs)) { echo "<TR>"; forech ($row s $key => $vl) { echo "<TD>$key=<b>$vl</b></TD>"; } echo "</TR>"; } echo "</TABLE>"; <TABLE border=> <TBODY> <TR> <TD>id=<B></B></TD> <TD>nme=<B> 木村尚志 </B></TD> <TD>ge=<B>53</B></TD> min_customerの全 <TD>gender=<B></B></TD> <TD>prefecture=<B> 東京都 </B></TD> <TD>telephone=<B>03-5324-0000</B></TD> mysql_close($conn); テータを表示する <TD>compny=<B>( 有 ) 山田電算 </B></TD></TR>...?> mysql-showtble.php </TBODY></TABLE> 29 30 </BODY> </HTML> 左記 PHP プログラムを作り サーバ上の自分のフォルダーにアップロードし 実行してみてください 実行結果 3 8