LAMPのお勉強日記 (14)
LAMP環境のお勉強日記
承前
上記エントリに呼応して、自分を「人体実験」することにした。
目的
- 自分が何をやったのか記録する
- 自分が何を出来るのか公開する
はじめに
>mysql -u root -p
Enter password:[パスワード]
mysql>
使用するデータベースを指定する
mysql>use db1
今回学んだこと
ビューとは、いくつかのテーブルからデータを抽出して作り出した、元のテーブルと関連性を持っているテーブル。
「create view [ビューの名前] as select [カラム名] from [テーブル名] where [条件]」
例1
ex) mysql>create view v1 as select nama,tosi from tb1; mysql>select * from v1; +-----------+------+ | nama | tosi | +-----------+------+ | sato | 40 | | takahashi | 28 | | nakagawa | 20 | | watanabe | 23 | | nishizawa | 35 | +-----------+------+
ビューの更新
元のテーブルと関連性を持っているので、ビューを変更すると元のテーブルにも反映される
ビューを更新すると、元になっているテーブルも更新される。
ex) mysql>update v1 set nama='shunin-sato' where nama='sato'; mysql>select * from v1; +------------+------+ | nama | tosi | +------------+------+ | shunin-sat | 40 | | takahashi | 28 | | nakagawa | 20 | | watanabe | 23 | | nishizawa | 35 | +------------+------+ mysql>select * from tb1; +------+------------+------+ | bang | nama | tosi | +------+------------+------+ | a101 | shunin-sat | 40 | | a102 | takahashi | 28 | | a103 | nakagawa | 20 | | a104 | watanabe | 23 | | a105 | nishizawa | 35 | +------+------------+------+
条件を付けてビューを作成してみる。
テーブル「tb」からカラム「uria」が100以上のレコードだけ抽出、そこにテーブル「tb1」を結合させて、社員の氏名も表す。
ex) mysql>create view v2 as select tb.bang,tb1.nama,tb.uria from tb join tb1 using(bang) where tb.uria>=100; mysql>select * from v2; +------+------------+------+ | bang | nama | uria | +------+------------+------+ | a103 | nakagawa | 101 | | a104 | watanabe | 181 | | a101 | shunin-sat | 184 | | a101 | shunin-sat | 300 | | a102 | takahashi | 205 | +------+------------+------+
※using(bang)は、bang.tb=bang.tb1と同じ。
元のテーブルを変更した場合、条件付きのビューは変更されるか?
ex) mysql>select * from tb; +------+------+------+ | bang | uria | tuki | +------+------+------+ | a103 | 101 | 4 | | a102 | 54 | 5 | | a104 | 181 | 4 | | a101 | 184 | 4 | | a103 | 17 | 5 | | a101 | 300 | 5 | | a102 | 205 | 6 | | a104 | 93 | 5 | | a103 | 12 | 6 | | a107 | 87 | 6 | +------+------+------+ mysql>update tb set uria=777 where uria=54; +------+------+------+ | bang | uria | tuki | +------+------+------+ | a103 | 101 | 4 | | a102 | 777 | 5 | | a104 | 181 | 4 | | a101 | 184 | 4 | | a103 | 17 | 5 | | a101 | 300 | 5 | | a102 | 205 | 6 | | a104 | 93 | 5 | | a103 | 12 | 6 | | a107 | 87 | 6 | +------+------+------+ mysql>select * from v2; +------+------------+------+ | bang | nama | uria | +------+------------+------+ | a103 | nakagawa | 101 | | a102 | takahashi | 777 | | a104 | watanabe | 181 | | a101 | shunin-sat | 184 | | a101 | shunin-sat | 300 | | a102 | takahashi | 205 | +------+------------+------+
反映されている。
ビューの確認
「show tables;」
mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | tb | | tb1 | | tb2 | | tb3 | | tb_zyun | | tb_zyun2 | | v1 | | v2 | +---------------+ mysql>desc v1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | nama | varchar(10) | YES | | NULL | | | tosi | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
出来る場合と出来ない場合がある。
mysql>insert into v1 values('baito-isid',18); mysql> select * from v1; +------------+------+ | nama | tosi | +------------+------+ | shunin-sat | 40 | | takahashi | 28 | | nakagawa | 20 | | watanabe | 23 | | nishizawa | 35 | | baito-isid | 18 | +------------+------+ mysql> select * from tb1; +------+------------+------+ | bang | nama | tosi | +------+------------+------+ | a101 | shunin-sat | 40 | | a102 | takahashi | 28 | | a103 | nakagawa | 20 | | a104 | watanabe | 23 | | a105 | nishizawa | 35 | | NULL | baito-isid | 18 | +------+------------+------+
今回はここまで。
次回は「ストアドプロシージャ」について。