认识视图
什么是视图
视图是一个虚拟表,是从数据库中一个或多个表中到出来的表。视图还可以从已经存在的视图的基础上定义。
视图的作用
1.简单化
将那些被经常使用查询的定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
2.安全性
通过视图用户只能呢查询和修改他们所能见到的数据。数据库中的其他数据则机看不见也去不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。
3.逻辑数据独立性
属于可帮助用户屏蔽真实表结构变化带来的影响。
创建视图
基本语法:CREATE VIEW 视图名 SELECT 视图结构(一个select语句)
在单个表上创建视图
mysql> select * from t;
+-------+-------+
| count | price |
+-------+-------+
| 1 | 3 |
| 2 | 6 |
| 3 | 2 |
| 4 | 6 |
+-------+-------+
创建视图:
mysql> create view view_t as select count,price,count*price from t;
查看视图:
mysql> select * from view_t;
+-------+-------+-------------+
| count | price | count*price |
+-------+-------+-------------+
| 1 | 3 | 3 |
| 2 | 6 | 12 |
| 3 | 2 | 6 |
| 4 | 6 | 24 |
+-------+-------+-------------+
再创建一个视图 ,自定义字段名
mysql> create view view_n(n1,n2,n3) as select count,price,count*price from t;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from view_n;
+------+------+------+
| n1 | n2 | n3 |
+------+------+------+
| 1 | 3 | 3 |
| 2 | 6 | 12 |
| 3 | 2 | 6 |
| 4 | 6 | 24 |
+------+------+------+
可以看到两个视图里面的数据是一样的,但是两个视图中的字段却是不同的,所以当某些人拿到这个视图的内容却不知道数据的含义。从而保证了数据库的安全。
在多个表上创建视图
创建两张表:结构如下
mysql> select * from student;
+------+-------+
| s_id | name |
+------+-------+
| 1 | zhao |
| 2 | qian |
| 3 | sun |
| 4 | li |
| 5 | zhou |
| 6 | wu |
| 7 | zheng |
+------+-------+
mysql> select * from stu_info;
+------+-------+--------------+
| s_id | glass | addr |
+------+-------+--------------+
| 1 | 1ban | henan |
| 2 | 1ban | hubei |
| 3 | 2ban | heilongjiang |
| 4 | 2ban | henan |
| 5 | 3ban | guangxi |
| 6 | 3ban | hunan |
| 7 | 4ban | henan |
+------+-------+--------------+
创建视图
mysql> create view stu_glass(id,name,glass) as select student.s_id,student.name,stu_info.glass from student inner join stu_info where student.s_id = stu_info.s_id;
查看视图数据
mysql> select * from stu_glass;
+------+-------+-------+
| id | name | glass |
+------+-------+-------+
| 1 | zhao | 1ban |
| 2 | qian | 1ban |
| 3 | sun | 2ban |
| 4 | li | 2ban |
| 5 | zhou | 3ban |
| 6 | wu | 3ban |
| 7 | zheng | 4ban |
+------+-------+-------+
查看视图
describe 语句查看视图基本信息
describe 视图名
mysql> describe stu_glass;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(40) | YES | | NULL | |
| glass | varchar(40) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
显示出了视图的字段定义,字段数据类型,是否为空,是否为主/外键,默认值和额外信息。
show table status 语句查看视图基本信息
show table status like '视图名' ; *视图名需加引号
mysql> show table status like 'stu_glass'\G;
*************************** 1. row ***************************
Name: stu_glass
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
/G 是为了让其一行输出 ,Comment的值为VIEW 说明该表为视图,其他的信息也为NULL 说明这是为一个虚表。
show create view 语句查看视图详细信息
show create view 视图名;
在mysql中 information_schema数据库下的views表存储了所有视图的定义。
修改视图结构
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候们可以通过修改视图来保持与基本表的一致性。
create or replace view 语句修改视图
alert 语句修改视图
更新视图
视图的增删改查和表中的操作类似
更新视图是值通过视图来插入,更新,删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过更新的时候都是转到基本表上进行更新的。如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
当视图是根据一个表而建立的时候:
增(用视图添加数据,视图中没有表中的字段,表中字段对应字段数据为null)
删除(一 一对应)
改(一 一对应,只是表中更改的数据,未必会影响视图显示的数据)
当视图是根据多个表而建立的时候:
当两个表中的数据都做添加,视图才会显示添加的数据。
当一个表中的数据更改删除时(这里说的是视图中对应的字段数据),视图显示数据就会更改。
不能通过视图来进行添加更改删除,数据。(会报错)
mysql> update view_t set count = 6;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
添加 insert into
删除视图
drop view 视图名;
总结:
mysql中视图和表的区别和联系
1.两者的区别:
(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。
(2)视图没有实际的物理记录,而表有。
(3)表是内容,视图是窗口。
(4)表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对他进行修改,但视图只能用创建的语句来修改。
(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,
只是一些SQL语句的集合,从安全的角度来说,视图可以放置用户接触数据表,因而用户不知道表结构。
(6)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
(7)视图的建立和删除只影响视图本身,不影响对应的基本表。
2.两者的联系:
视图是在基本表之上建立的表,它的结构和内容都是来自于表,它依据基本表存在而存在。
一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和逻辑意义上建立的新关系。