视图的含义和基本的使用
含义:
视图是一个虚拟表,是数据库从一个或者多个表中导出的表。视图还可以在已有的视图的基础上定义。说白了视图就是为了不让用户看到真实的表结构而用sql语句组成了虚表展现给用户,对构成视图的基本表修改会直接影响到视图,而对视图数据的修改也可以使真实的表数据发生改变。
视图与表的比较
1.视图是已经编好的sql语句,是基于sql语句结果集的可视化的表,而表不是
2.视图没有实际的物理记录,而表有。
3.表是内容,视图是窗口
4.表占有物理空间,而试图不占有,视图只是逻辑概念的存在
5.从安全的角度来说,视图可以防止用户亲密接触表,因而用户不知道表结构。
6.视图的删除和创建不会影响到基本表
创建视图
create [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED| LOCAL] CHECK OPTION]
例如:
在单表中创建视图
首先创建表t,插入数据,然后创建名为view_t的视图
mysql> create table t (quantity INT,price INT);
插入数据:
mysql> INSERT INTO t values(3,50);
查看效果
mysql> select * from t;
+----------+-------+
| quantity | price |
+----------+-------+
| 3 | 50 |
+----------+-------+
创建视图:
mysql> create view view_t as select quantity,price,quantity * price from t;
查看结果:
mysql> select * from view_t;
+----------+-------+------------------+
| quantity | price | quantity * price |
+----------+-------+------------------+
| 3 | 50 | 150 |
+----------+-------+------------------+
1 row in set (0.00 sec)
前面的视图的字段没有自己命名,可以这样创建视图来给视图的字段命名
mysql> create view view_t2(qty,price,total) as select quantity,price,quantity * price from t;
这样字段就为自己命名:
mysql> select * from view_t2;
+------+-------+-------+
| qty | price | total |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
1 row in set (0.00 sec)
在多表上创建视图
首先创建两个表如下:
student 表:
create table student(s_id INT,name VARCHAR(40));
stu_info表:
create table stu_info
(
s_id INT,
glass VARCHAR(40),
addr VARCHAR(90));
分别插入数值:
INSERT INTO student values(1,'wangling'),(2,'gaoli'),(3,'zhanghai');
INSERT INTO stu_info values(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');
创建视图stu_glass
create view stu_glass(id,name,glass,addr) as select student.s_id,student.name,stu_info.glass,stu_info.addr from s
tudent,stu_info where student.s_id=stu_info.s_id;
结果如下:
mysql> select * from stu_glass;
+------+----------+--------+----------+
| id | name | glass | addr |
+------+----------+--------+----------+
| 1 | wangling | wuban | henan |
| 2 | gaoli | liuban | hebei |
| 3 | zhanghai | qiban | shandong |
+------+----------+--------+----------+
查看视图
describe 视图名
describle简写为desc,执行劫夺会显示出字段定义,类型,是否为空,外键,数值及额外信息。
show table status like '视图名'来查看视图的基本信息。
show create view 视图名来查看视图的详细信息,包含了创建时的sql语句。
在mysql中,information_schema数据库下的views表中存储了所有视图的定义,通过对views表的查询,可以查看数据库中所有试图的详细信息。可以通过如下语句:
select * from information_schema.views
修改视图
1.用create语句来修改视图,语法和创建视图一样,用的参数不同。
例如:
create or repalce view view_t as select * from t;
有view_这个视图修改,没有就创建,修改后结果如下:
第三列不见了
mysql> desc view_t;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| quantity | int(11) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
+----------+---------+------+-----+---------+-------+
2.alter修改视图
alter [ALGORITHM={UNDEFIND| MERGE|TEMPTABLE}] VIEW view_name [(column_list)] as select_statement |WITH (CASCADED|LOCAL] CHECK OPTION]
例如,修改view_t
alter view view_t as select quantity from t;
查看view_t,只剩下一个字段
mysql> desc view_t;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| quantity | int(11) | YES | | NULL | |
+----------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
更新视图
更新视图的操作会影响到基本表的数据
可以使用update语句
update view_t set quantity=5
再查看表内容,发生了改变
mysql> select * from t;
+----------+-------+
| quantity | price |
+----------+-------+
| 5 | 50 |
+----------+-------+
另外的视图字段值也会相应变化
mysql> select * from view_t2;
+------+-------+-------+
| qty | price | total |
+------+-------+-------+
| 5 | 50 | 250 |
+------+-------+-------+
1 row in set (0.00 sec)
在表中插入新的数据时,视图也会随之更新。
也可以用delete删除视图中的记录。
delete from view_t2 where price=5
这样的话,基表中的数据也会被删除,但是有三种是视图的更新操作不会完成
(1)在定义视图的select 后的字段列表中使用了数学表达式
(2)在定义视图的select 后的字段列表中使用了聚合函数
(3) 在定义视图的select 后的字段列表中使用了distinct,union,top,group by或者having子句。
删除视图
drop view [if exists] view_name [,view_name]......[restrict|cascade]
例如:
drop view if exists stu_glass;
本文详细介绍了数据库视图的概念,强调了视图作为虚表的特性,以及与真实表的区别。通过实例展示了如何创建、修改、更新和删除视图,并探讨了视图在安全性及数据操作上的影响。视图的创建包括在单表和多表上的应用,提供了SQL语句示例。此外,还提到了如何查询和了解视图的详细信息。
956

被折叠的 条评论
为什么被折叠?



