PHPのお勉強 =MySQLを使ったPage 

元ページへ(いぶき自由研究実験室)

リンク元ページに移動  MySQLを使ったPage 

図書館機能構築 LazarusDBソフト 

 SQLiteでプログラミング


SQLの使用方法

phpMyAdmainを立ち上げSQLタブをクリックし、下に表示される枠に書き込む

/select * from worktb

*ここでmysqdbは今回のプログラムで扱うテーブルの器

worktbは取敢えず商品名リストで

bngは通番(番号)でintから Auto Incrementに変更しました

sinaは品(しな)です


SQLの実行結果が表示された


次はSQL記入枠を初期化し、新たに下の用に記入し〔実行〕ボタンを押す。



データを挿入するときの文法


挿入文の文法@

insert into worktb set bng=3,sina='寄贈本B';


挿入文の文法A

insert into worktb (bng,sina) values(1,'寄贈本B');



*注1・文字列を入力する時は区別の為

['(シングルコーテーション)]又は["(ダブルコーテーション)] で囲む。


*注2・SQL文の最後には[;(セミコロン)]

で終わる必要が有りますが、実際は無くても動作します。



データを変更するときの文法/上部が変更項目内容・下部が指定条件

update worktb set sina='献上B'

where bng=2;



データ(行)を削除するときは/上部が削除文・下部が指定条件

delete from worktb

where bng=3;



検索のためのSQL文は/上部が表示項目の指定文・下部が絞り込み条件

select *(全て) from worktb

where bng=3;

select bng,sina(表示する項目) from worktb

where bng=3;


あいまい検索は select from worktb where sina like

何処かに文字が在った場合 '%[探す文字]%'(or "")

前方或いは後方一致或は小文字大文字の一致以下に順に

'[探す文字]%','%[探す文字]','[探す文字]'


Orの使い方に注意が必要ですOrを使う時はOrとなる条件を囲う必要が有ります

SELECT * FROM `worktb` where bng > 0 or bng < 6 and sina like '%寄贈%'

⇒ これは番号が1以上5以下で寄贈という文字が含まれている商品と言う意味で使うと結果は

編集 編集 コピー コピー 削除 削除 1 献上物A NULL NULL
編集 編集 コピー コピー 削除 削除 2 献上物B NULL NULL
編集 編集 コピー コピー 削除 削除 3 寄贈本A NULL NULL
編集 編集 コピー コピー 削除 削除 4 寄贈本B NULL NULL
編集 編集 コピー コピー 削除 削除 5 寄贈本C NULL NULL
編集 編集 コピー コピー 削除 削除 6 寄贈本D NULL NULL

と違う結果が表示されるこの時正しくは/SELECT * FROM `worktb` where (bng > 0 or bng < 6) and sina like '%寄贈%'
編集 編集 コピー コピー 削除 削除 3 寄贈本A NULL NULL
編集 編集 コピー コピー 削除 削除 4 寄贈本B NULL NULL
編集 編集 コピー コピー 削除 削除 5 寄贈本C NULL NULL
編集 編集 コピー コピー 削除 削除 6 寄贈本D NULL NULL
かっこで囲うことで思う結果が表示される


更に並べたい順を指定するにはAnd や Or の文の後にOrder Byを加え

order by price,bng とする(先頭の項目名から並べる順番が優先される)

順番を降順にするならば降順にしたい項目名の後に desc を付す

order by price disc,bng


重複したデータを省略いたい場合はSelect Distinct 或はGroup By

を使い分ける必要が有るがこの後詳しく説明していく


データ型に自動採番機能Auto Increment[A_I]が指定できます。

テーブルを指定・構造を指定・A_Iに指定したい項目の〔変更〕をクリック

上部項目中・[A_I]項目の下部チェックボックスを[レ]すると変更できる

*注3・エラーが出るなら設定項目[デフォルト値]を[なし]に設定し再度試してみる

設定が出来たなら[A_I]に設定した項目の右端に[AUTO_INCREMENT]と表示されます
この後insert 文で [A_I]項目を入力せずに実行すれば内容が一行追加されます。

また項目型Datetime型とTimstamp型が在る
Datetime型は日付を指定して入力する必要が有る、しかし
Timestamp型はデータを更新するとき自動的にタイムスタンプ型のデータが入力される

Count,Sum,Max,Min,AvgはおなじみのSQLなので省略する

また新しい商品を追加するSQLを実行しました。
insert into worktb sina = '[追加したい商品名]';
先の項目タイプの変更bng項目IntをAut Increment
に変更したのでBng項目は入力したらErrになります。

テーブルの内容を変更する/
今回はColumnの追加SQL Alter Table Addを実行しました
ALTER TABLE worktb ADD price numeric(15,0);
現時点での内容は以下の様になっています。

編集 編集 コピー コピー 削除 削除 1 献上物A NULL
編集 編集 コピー コピー 削除 削除 2 献上物B NULL
編集 編集 コピー コピー 削除 削除 3 寄贈本A NULL
編集 編集 コピー コピー 削除 削除 4 寄贈本B NULL
編集 編集 コピー コピー 削除 削除 5 寄贈本C NULL
編集 編集 コピー コピー 削除 削除 6 寄贈本D NULL

また商品検索用の探す文字項目Sagasuを加えておきます。
Alter Table Add Sagasu Text/alter table worktb add sagasu text;
商品の説明で探すときはSagasu項目に対して検索をかければ目的の商品を見つける事が出来ます。

次はリレーションする/複数のテーブルを関連付けて表示する
これに関しては更に後日説明するが今日は基本のみ
select * from worktb w,[別のtb] b,[また別] m
where w.bng=b.nmb and w.bng=m.no / w.bng = b.nmb = m.no と言う意味になる

外部結合 ⇒Left Join,Right Join について
ここまでのテーブルリンクは、内部結合、この後で外部結合のSQLを記入しておきます。
select h.no,h.nam,sum(w.konyusu) from w.hinmei h left join worktb w
on h.no = w.bng group by h.no,h.nam;
これでhinmei.tableの内容が順に集計され表示されます。
right join は⇒のテーブルに表示された順にすべての集計がされる結合
通常はleft join さえ覚えておけば大抵の集計が可能となる

内部結合は通常のSQLのテーブルリンクでありわざわざその書式は使わないが書式を記しておく
select h.no,h.nam,sum(w.konyusu) from w.hinmei h inner join worktb w
on h.no = w.bng group by h.no,h.nam;

あと Distinct(レ),between,in,limit と言う用法も開設します。
select * from worktb where price >= 10 and price <= 30; これを下記のようにかける
select * from worktb where price 10 between 30;

次は in で
select * from worktb where nmb = 10 or nmb = 30;
select * from worktb where id( 10, 30);

又次にに limit
select * from worktb where limit 2;
すると2件が上限にデータが表示される
select * from worktb where limit 1(開始位置),2(開始位置からの表示件数);
但し開始位置の最初の引数は0であることに注意する事

最後に as について解説する
select h.no,h.nam,sum(w.konyusu) as sousiresu from w.hinmei h inner join worktb w
on h.no = w.bng group by h.no,h.nam;
結果としてh.no/1,h.nam/献本A,sousiresu/20 と言うように閣下が表示される
BDEの場合はASは省略できていたが、MySQlはどうなのか確認する事


バックアップとリストア機能
MySQlのバックアップとリストアは単にハードディスクの内容のコピーだけではっ困難で
バックアップはphpMyAdminよりエクスポート
リストアはphpMyAdminよりインポート
の機能を称することが基本のようである
もし大きなデータのバックアップやレストアはこの機能では無理で
業者に依頼しなければ出来ないとされている・・・?

MySQL データベースのバックアップ/復元するにはの回答がネット上にありました。
MySQL データベースのバックアップ/復元には、mysqldump コマンドを利用します。
mysqldump コマンドは、MySQL をインストールすれば含まれています。
確認してみました右に有りました[ C:\MAMP\bin\mysql\bin\mysqldump.exe ]実行方法は?
ネット上ではコマンドプロンプトからの説明がありましたがもう少し調べたらいい方法があるかも?




これ以降実際にPHPとDBでシステムを構築しながら学習をしていく