#以表中的"name,age"創建視圖. mysql> select * from student; +-----+--------+------+------+ | SNO | SNAME | AGE | SEX | +-----+--------+------+------+ | 1 | 換換 | 23 | 男 | | 2 | 劉麗 | 22 | 女 | | 4 | NULL | 10 | NULL | | 5 | 張友 | 22 | 男 | | 6 | 劉力 | 22 | 男 | +-----+--------+------+------+ 5 rows in set (0.00 sec) #創建視圖stage. mysql> create view stage as select sname,age from student; Query OK, 0 rows affected (0.02 sec) #查看視圖(如果直接看,很難看出是視圖還是表). mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | boy | | boy2 | | boy3 | | course | | sc | | stage | | student | +----------------+ 7 rows in set (0.00 sec) #查看視圖中的數據. mysql> select * from stage; +--------+------+ | sname | age | +--------+------+ | 換換 | 23 | | 劉麗 | 22 | | NULL | 10 | | 張友 | 22 | | 劉力 | 22 | +--------+------+ 5 rows in set (0.00 sec) #表中的數據如下: mysql> select * from sc; +-----+-----+-------+ | SNO | CNO | SCORE | +-----+-----+-------+ | 1 | K1 | 83 | | 2 | K1 | 85 | | 2 | K5 | 90 | | 5 | K1 | 92 | | 5 | K5 | 84 | | 5 | K8 | 80 | +-----+-----+-------+ 6 rows in set (0.00 sec) #分組算表中的平均值,取最大的值. mysql> select cno,avg(score) from sc group by cno; +-----+------------+ | cno | avg(score) | +-----+------------+ | K1 | 86.6667 | | K5 | 87.0000 | | K8 | 80.0000 | +-----+------------+ 3 rows in set (0.00 sec) #求平均值. mysql> select cno,avg(score) as pj from sc group by cno; +-----+---------+ | cno | pj | +-----+---------+ | K1 | 86.6667 | | K5 | 87.0000 | | K8 | 80.0000 | +-----+---------+ 3 rows in set (0.00 sec) #查詢平均值中最大的值. mysql> select cno,avg(score) as pj from sc group by cno order by pj desc limit 1; +-----+---------+ | cno | pj | +-----+---------+ | K5 | 87.0000 | +-----+---------+ 1 row in set (0.00 sec) #直接創建視圖"pj",然後隊視圖進行排序,就比較簡單. mysql> create view pj as select cno,avg(score) as pj from sc group by cno; Query OK, 0 rows affected (0.01 sec) mysql> select * from pj; +-----+---------+ | cno | pj | +-----+---------+ | K1 | 86.6667 | | K5 | 87.0000 | | K8 | 80.0000 | +-----+---------+ 3 rows in set (0.00 sec) mysql> select * from pj order by pj desc limit 1; +-----+---------+ | cno | pj | +-----+---------+ | K5 | 87.0000 | +-----+---------+ 1 row in set (0.00 sec) 修改視圖虛擬表,物理表會變? #表中的數據如下: mysql> select * from sc; +-----+-----+-------+ | SNO | CNO | SCORE | +-----+-----+-------+ | 1 | K1 | 83 | | 2 | K1 | 85 | | 2 | K5 | 90 | | 5 | K1 | 92 | | 5 | K5 | 84 | | 5 | K8 | 80 | +-----+-----+-------+ 6 rows in set (0.00 sec) #創建視圖"sc2"存放表sc中sno,score的值. mysql> create view sc2 as select sno,score from sc; Query OK, 0 rows affected (0.01 sec) #查看視圖中的數據. mysql> select * from sc2; +-----+-------+ | sno | score | +-----+-------+ | 1 | 83 | | 2 | 85 | | 2 | 90 | | 5 | 92 | | 5 | 84 | | 5 | 80 | +-----+-------+ 6 rows in set (0.00 sec) #更新視圖sc2中的數據. mysql> update sc2 set score=99 where sno=1; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 #查看視圖中的數據已經改變. mysql> select * from sc2; +-----+-------+ | sno | score | +-----+-------+ | 1 | 99 | | 2 | 85 | | 2 | 90 | | 5 | 92 | | 5 | 84 | | 5 | 80 | +-----+-------+ 6 rows in set (0.00 sec) #查看物理表中的數據也已經改變. mysql> select * from sc; +-----+-----+-------+ | SNO | CNO | SCORE | +-----+-----+-------+ | 1 | K1 | 99 | | 2 | K1 | 85 | | 2 | K5 | 90 | | 5 | K1 | 92 | | 5 | K5 | 84 | | 5 | K8 | 80 | +-----+-----+-------+ 6 rows in set (0.00 sec) 如果修改虛擬表中的平均值,物理表中的數據會怎麼變? #查看之前虛擬視圖中的平均值. mysql> select * from pj; +-----+---------+ | cno | pj | +-----+---------+ | K1 | 92.0000 | | K5 | 87.0000 | | K8 | 80.0000 | +-----+---------+ 3 rows in set (0.00 sec) #修改視圖中的平均值,查看結果如何. mysql> update pj set pj=90 where cno="k8"; ERROR 1288 (HY000): The target table pj of the UPDATE is not updatable mysql> 注意:報錯提示不能更新修改平均值.
mysql中視圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.