数据库视图小结

本文详细介绍了数据库视图的概念,强调了视图作为虚表的特性,以及与真实表的区别。通过实例展示了如何创建、修改、更新和删除视图,并探讨了视图在安全性及数据操作上的影响。视图的创建包括在单表和多表上的应用,提供了SQL语句示例。此外,还提到了如何查询和了解视图的详细信息。

视图的含义和基本的使用

含义:

视图是一个虚拟表,是数据库从一个或者多个表中导出的表。视图还可以在已有的视图的基础上定义。

说白了视图就是为了不让用户看到真实的表结构而用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;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值