表和视图的区别

1.表  create or replace table  emp (id int,name varchar);

2.视图  create or replace view emp as select id from emp;

当emp表的数据增删改的时候,视图里的数据也随着变化,视图也可以增删改,但是要符合逻辑条件(尤其是复杂视图)

区别如下:

1、视图是已经编译好的sql语句。而表不是   
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在
5、表是内模式,试图是外模式

6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 
8、视图的建立和删除只影响视图本身,不影响对应的基本表。

注意:

1.视图是一个子查询,性能肯定会比直接查询要低(尽管sql内部有优化),所以使用视图时有一个必须要注意的,就是不要嵌套使用查询。尤其是复杂查询。

2.表的索引对于视图view来说是无效的,它是全表扫描的。

视图的作用:

1、当一个查询你需要频频的作为子查询使用时,视图可以简化代码,直接调用而不是每次都去重复写这个东西,有点高级语言中的封装的意思吧。
2、其实视图还有很多其他的用处,比如说你是一个系统的数据库管理员,你需要给他人提供一张表的某两列数据,而不希望他可以看到其他任何数据,这样你就可以给他建一个只有这两列数据的视图,然后把视图公布给他。

视图例子: with check option

  

SQL> create or replace view v_test as select * from test;
View created.
SQL> select * from v_test where rownum<5;
TABLE_NAME
------------------------------
ICOL$
IND$
COL$
CLU$
SQL> insert into v_test values('test111');
1 row created.
SQL> select * from v_test where table_name ='test111';
TABLE_NAME
------------------------------
test111
SQL> create or replace view v_test as select * from test where table_name like 'S%' with check option;
View created.
SQL> insert into v_test values('a111');
insert into v_test values('a111')
           *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation

  

参考资料:

1.https://blog.csdn.net/zengmingen/article/details/51004203

    

原文地址:https://www.cnblogs.com/jycjy/p/7216089.html