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