68
5 Web アプリ勉強会 私の SQL MySQL (+ PHP との連携 id:stick23rd Twtitter/stiq

20080617 05 Mysql

  • Upload
    stiq-2e

  • View
    1.009

  • Download
    0

Embed Size (px)

Citation preview

第 5 回Web アプリ勉強会

私のSQL -MySQL (+ PHP との連携)

id:stick23rdTwtitter/stiq

今日、やること

0.Abstract 1. MySQL ダウンロード&インストール&

設定 2. SQL 文の超基本

Why DB ? 型、文字コード

3. MySQL と PHP の連携

4. ブログっぽいものをつくる

こんなのができます。

上級生、既にM ySQL が入っている人へ

今回は、UTF-8 でM ySQL を設定します。

文字コードとかは、若干違うので注意 文字コードの確認は、“SHOW

VARIABLES LIKE ‘char%’;” で、できます。

Cp932 などで入っている人は、データベースを作るときに、SET NAMES utf8 などをつけるなどして、対処するようお願いいたします。

( for 上級生) 文字コードを指定してDB を作る方法

CREATE DATABASE mysql_test CHARACTER SET utf8;

SHOW CHARACTER SET で使用可能な文字コードを一覧できます。

http://mysql.javarou.com/dat/000571.html

1.MySQL のダウンロード&インストール&設定

MySQL ダウンロード

http://dev.mysql.com/downloads/mysql/5.0.html#win32 にアクセスして下さい。

MySQL ダウンロード

赤丸のところをクリック

MySQL ダウンロード

MySQL ダウンロード

適当なところに zip ファイルをダウンロードする。

MySQL インストール

Zip ファイルを解答して、できたフォルダの中にあるSetup.exe をクリック

MySQL インストール

展開されるところ(下線)を注意して、Next Install→ を押してください。

しばらくお待ちください

インストールができると上の画面が出てくるので、「Next 」。次の画面も「Next 」で。

インストールができました!そのまま「 Finish 」を押します。

MySQL の初期設定

引き続きMySQL の設定をします。

M ySQL の初期設定

デフォルト(最初の設定)のまま、「Next 」を押し続けてください。

文字コード(言語)の設定 大事なところ!! PHP では、UTF-8 を選択したので、こっ

ちもUTF- 8を選択します!

Windows にパスを入れる設定

赤丸のところに、チェックを入れて、「Next 」を押します。

パスワードの設定

Root (なんでも設定する権利をもつユーザ)のパスワードを設定します。

同じものを 2 回

入れます。 このパスワード

は忘れないで

ください!

設定の確認→実行

MySQL の確認

以上で、インストールと設定は終わりです。

正しく、インストールできているか、確認します。

ここでは、同時に、MySQL の立ち上げ方も覚えます。

コマンドプロンプトを立ち上げます。

「ウィンドウズキー+R 」→「“ cmd” と入力してOK 」

「すべてのプログラム」→「アクセサリ」→「コマンド プロンプト」

MySQL を立ち上げる

“mysql –u root –p” と入力して、「 Enter 」

先ほど設定したパスワードを入れます。

MySQL の確認

以下のように、メッセージが出てくれば、正しくMySQL が入っています。

終わるときは、’ \q’ または’ exit’ と入力すると終了します。

うまくいかなかったら、その辺にいる人たちに聞きまわってください。

できた人は、先週の PHP の課題の復習などをしておいてください。

次から、第 2 章 SQL の基本になります。

データベースの超基本

データベース(DB )って何? データを保存しておく場所。貯めておくとこ

ろ。 Excel をイメージすると良いかもしれません。 今あるおおよそのシステムは、データベース

とコンピュータ・Web のやりとりで、できています。

なぜデータベース?

Web アプリで一番大変なところは、ファイルからデータを持ってくるところ

実は、プログラムからファイルを読み書きするととても大変!

一度限りしか使えない! データをいろいろと複雑に処理したい!

→これをいろいろ解決してくれるのが、DB !

Kwsk

データの独立性:データの構造が変わってもプログラムからは独立しているので、プログラムの修正が必要ない。また、どのプログラムからも利用できること。

データの一貫性:複数のユーザーが同時にデータを操作できること。また、同時に変更や削除した場合でも、データに矛盾が発生することなく利用できること。

データの整合性:データの重複が発生しないこと。 データの機密性:データベースへアクセスするユー

ザーを制御できること。 データの障害対策:データベースに何らかの障害がお

こった場合でも、回復するための手段をもつこと。 SQL 文の標準化

MySQL って何?

実際のデータベースを含んで、操作したり、管理することができるツール

操作する命令文→SQL 文

同じようなものに、Oracle 、 PostgreSQL 、DB2 などなど

データベースと Excel

ブック(ファイル) → データベース

シート → テーブル、表

Excel の列 → フィールドExcel の行 → レコード

データベースを表示してみる

SHOW DATABASES;→エンター

MySQL のお約束

MySQL をコマンドプロンプトで使うときは、必ず最後に、” ;” をつけて、 Enterで命令が実行できます。

長い命令文のときは、 Enter で次の行にいくなど、適宜見やすくしてください。

>SHOW DATABASES; >SHOW >DATABASES;

MySQL の大文字と小文字

MySQL の本を見ると、命令にあたるところ(SQL 文)や型(数字とか文字型とか、後で解説)は大文字で、自分でつくるDB や表、フィールドは小文字で書いてあることが多いです。

今回もそれに倣います。・・・が、今回教える人は、そうではないので、あまりつっこまないでね。

ただ、Windows では、MySQL は大文字小文字の区別はありません。 TEST=test

MAC やUNIX だと違うかも・・・。 TEST≠text

データベースを作る→使う

CREATE DATABASE データベース名 ;

SHOW DATABASES; で増えているか確認

USE データベース名 ; で、そのデータベースを使う

テーブルを作る

いままでので、データベース( Excel でいうところのファイル)ができました。

これからは、テーブル( Excel でのシート)をつくり、フィールド(一番上の名前、学籍番号とかの項目)を設定します。

SQL は、これをひとまとめにしてやります。

試しに、これと同じようなものをデータベースで作ってみましょう。

ID 名前 学籍番号 年齢 視力1 abc 70910001 19 1.52 xyz 70910010 20 2.03 うーうー 70910023 21 0.34 えーえー 70910040 20 0.5

表: student

ただし・・・

MySQL では、項目(フィールド)の名前に日本語を使うと、上手く扱えないことがよくあります。

なので、フィールドは英語に直して使いましょう。

ID nam e studenet_id age eyesight1 abc 70910001 19 1.52 xyz 70910010 20 2.03 うーうー 70910023 21 0.34 えーえー 70910040 20 0.5

テーブルの作成

これと同じように入力してください。 改行は Enter で、できます。

さっきのテーブル作成の解説

フィールドの属性 それぞれの項目に

は、データの型が決まっている。

ID nam e student_id age eyesight1 abc 70910001 19 1.52 xyz 70910010 20 2.03 うーうー 70910023 21 0.34 えーえー 70910040 20 0.5

整数型

文字型

小数型

フィールドの属性いろいろ

DATATIME (年 -月 - 日 時間 :分 :秒)

TIMESTUMPDATE (年 -月 - 日)

日付が入るフィールド

日付

CHAR 、VARCHARTEXT

文字列が入るフィールド

名前、テキスト

FLOAT (小数点 8桁くらい)

DOUBLE (それ以上の精度)

小数がある数値のフィールド

視力、身長

INT (整数)、BIGINT(長い桁( 10 の 19乗くらい)の整数)

整数のみのフィールド

ID 、学籍番号

型フィールドの性質例

フィールドのサイズ指定

フィールドで指定するときは、型のサイズも一緒にしています。(数字型は指定しなくても良い、文字型は必須)

varchar(50)なら、文字列 50 文字まで(最大 255 文字まで)

char と varchar char は固定長、 varchar は可変長

つまり、 char(8) としたところに、’ abcd’ と入れると、DB には、’ abcd____‘ と入っていて、スペースと容量の無駄! varchar(8) にすると、空気を読んでくれます。

プライマリーキー

プライマリーキーとは? 重複を許さない項目のこと ひとつのレコード(行)に、プライマリーキーをつける

ことで、単一に特定できる 逆に、表からプライマリーキーを指定することで、レ

コードを特定できる。 テーブルをつくるときに、項目の後ろに書く。

ID nam e studenet_id age eyesight1 abc 70910001 19 1.52 xyz 70910010 20 2.03 うーうー 70910023 21 0.34 えーえー 70910040 20 0.5

もういっかい、CREATE 文

CREATE TABLE 表の名前(  フィールド 1 の名前  その型 PRIMARY

KEY, フィールド 2 の名前 その型 , ・・・ );

CREATE TABLE menber( id INT PRIMARY KEY, name varchar(50));

テーブルにデータを追加!

INSERT INTO テーブル名 VALUES(値1, 値 2 ) ;

数値はそのまま、文字列は’’で囲みます。

同じようにしてデータを追加

日本語を打つときは、Alt キー+半角 /全角キーで、打てます。

ID nam e studenet_id age eyesight1 abc 70910001 19 1.52 xyz 70910010 20 2.03 うーうー 70910023 21 0.34 えーえー 70910040 20 0.5

データの挿入

もちろん、主キー( PRIMARY KEY )を設定したので、同じ ID を入れようとすると怒られます。

日本語が、ggg・・・

あれ?日本語を入れるとエラー

実はこれ、文字コードの問題

文字コード

文字の情報もすべては、 0 と 1 でできている。

文字コードとは、文字を表示するためのルール

文字コード

日本語だと、 ISO-2022-JP EUC-JP Shift_JIS UTF-8 UTF-16 などなど

文字コードが異なると、人間が読み取ることができない、→文字化け

ブラウザで、上手く表示ができない残念なときの例のアレ

今回は・・・

設定で、’UTF-8’ で設定します。 しかし、コマンドプロンプトから入力する

ときは、 cp932 (Shift-JIS のWindows独自の拡張版)なので、文字コードが違うことになる。

MySQL に、この辺、どーにかしろと、命令する必要がある。

文字コード解決

SET NAMES cp932;

これによる、MySQL に今使っている文字コードが、 cp932 と伝えてやります。

これで、データを挿入すると、日本語も入ります。

疲れた・・・

以上、ここまで長々と説明が多かったですが、ここからは、どんどん作ります。

あと、説明が淡白になってきますが、わからなかったら、聞いてください。

データを見る

SELECT * from student;

SELECT id,name from student;

データの更新

UPDATE テーブル名 SET 変更するフィルード名 = 変更する値 [WHERE 条件式 ];

データの消去

DELETE FROM テーブル名 [WHERE 条件式 ];

Id=2 の人が消えました。

WHERE句

SELECT,UPDATE とかDELETE の後ろにつける、条件式

=,>,<,>=( 以上) ,<= (以下) ,<> (相違)

AND (A もB も) ,OR (A またはB ) ,NOT (A でないとき)

目の良い人( eyesight > 1.0) をメガネにします。

自由自在に表示できます。

演習のじかん

自由に、データベースを作ってみて、扱ってみてください。

PHP とMySQL の連携

GRANT -ユーザの追加 Root で接続するのは、安全上良くない データベースごとに個別のユーザを割り当て

る。

もう一度、入りなおしてみましょう。

PHP とMySQL の連携

mysql_connect( サーバ名 , ユーザ名 , パスワード ); 接続に成功すると、 true 。しなけれ

ば、 false を返す。

mysql_select_db( データベース名 , 変数 )

<?php$my_Con = mysql_connect("localhost","stiq",“123456");

if($my_Con == false){die("MYSQL の接続に失敗しました。 ");

}else{print "接続成功! ";

}

if(mysql_select_db(“db_test", $my_Con)){print “db_test データベースの選択成功! ";

} else {die(" データベースの選択に失敗しました。 ");

}?>

クエリ(命令文の実行)

mysql_query(SQL命令文 , 接続してきたもの変数 );

連想配列で、結果が返ってきます。

<?php

$my_Row = mysql_query("SELECT * FROM student", $my_Con);if(!$my_Row){

die(mysql_error());}while($row = mysql_fetch_array($my_Row)){

print $row["id"];print $row["name"];print $row["studenet_id"];print $row["age"];print $row["eyesight"];print "<br />";

}?>

演習

同じようにして、UPDATE,DELETE 文も作れます。

CRUD

CRUD とは、データベース管理システム(DBRS )に必要とされる 4 つの主要な機能、「作成(Create )」「読み出し(Read )」「更新(Update )」「削除(Delete )」をそれぞれ頭文字で表したものです。

これが、上手く使えるようになれば、たいていのWeb アプリケーションは作れるようになります。