数据库中表的概念很好理解,就是数据的一种组织存放形式。表中是包含真正的数据的。比如我有一张表如下
在磁盘中我可以找到表定义文件(.frm),由于我这里没有设置独立表空间,数据在共享表空间里
在共享表空间(或对应独立表空间)中你可以看见类似这样的数据。表空间就是表数据在磁盘中的保存位置
而视图。本质上是sql语句(或者说和 指针 的概念有点像)。
我这里创建了一个视图
我这里创建视图的语法是
create view view_table as select * from table1;
这和创建表的语法
create table view_table as select * from table1;
很像,但是实际本质完全不一样。创建表时,实际上时创建了一个空表,然后将数据插入空表。而创建视图时,实际上只是产生了一个“指针”指向了table1的列,虽然最后的结果看起来一样。
我们可以做个实验,向table1中插入数据
我们再查看视图
发现多了视图中同样多了一条数据。我们可以看一下视图在磁盘中的文件
因为视图文件不包含数据,为文本格式的,可以直接cat
我们可以直观看见视图在磁盘中就是一段sql代码和一些参数。
所以我们常说 数据库中的表是“物理表”(包含实际数据),视图是逻辑表(不包含数据),视图必须依赖实际的物理表。
另外:
视图是可以修改的
执行语句
create or replace view view_table as select name as name1,age as age1 from table1;
视图可以插入数据
执行语句
insert into view_table(name1,age1) values('bird',6);
--上面我将视图列名修改成name1,age1。这里不能再用原名了
而实际上对视图的插入是对原表的插入
删除数据同理
但是删除视图,原表并不会删除。
总结:实际上create view不过是将sql语句保存到了磁盘。视图就是sql代码。