mysql中視圖

#以表中的"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> 
注意:報錯提示不能更新修改平均值.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章