一、视图
1、定义
视图是基于一个或多个表的虚拟表,它本身不包含任何数据,只是一个查询语句的结果.
视图的数据源有3种情况:单一表查询结果、多表查询结果、视图查询结果(很少使用)
CREATE [OR REPLACE] VIEW view_name
AS 查询语句
大多数时候使用这种简化的语法就可以了,其它还可以设置视图为只读形式等,设置check option等,不过一般很少用.
注意:在当前用户下创建视图需要 CREATE VIEW 系统权限
2、示例
单表:
CREATE OR REPLACE VIEW my_view1
AS select p.pid, p.name, p,price from product p;
多表:
CREATE OR REPLACE VIEW my_view2
AS select p.pid, p.name, p,price, c.cid, c.cname
from product p, category c
where p.cid = c.cid;
3、视图进行DML操作的限制
一些复杂的视图是不能进行 DML操作的,例:
1)、具有集合操作符(UNION、UNION ALL、INTERSECT、MINUS)
2)、具有分组函数(MIN、MAX、SUN、AVG、COUNT等)
3)、具有GROUP BY、CONNECT BY、START WITH等子句
4)、具有DISTINCT关键字
5)、具有连接查询
6)、具有ROWNUM伪列
二、序列
1、定义
可供多个用户用来产生唯一数值的数据库对象,主要用来提供主键值.
在MySQL中有自增长auto_increment,而Oracle中没有自增长,但是可以通过建立序列来实现自增长的功能.
大多数时候我们都会通过工具来创建序列,这里介绍PLSQL Developer中创建序列.
name:序列的名称
Min value、Max value:最小值、最大值
Start with:第一个值
Increment by:步长,每次增加几
Cache size:缓存
Cycle :是否循环,因为序列主要用来提供主键,主键不能重复,所以一般是不循环
2、使用
nextval:取得序列下一个值
currval:取得序列当前值,不能单独使用,必须先使用nextval ,再使用currval
insert into product(pid, name) values(seq_my.nextval , '测试商品');
select seq_my.nextval, seq_my.nextval from dual;
三、索引
1、定义
索引和书籍目录原理类似,是为了提高数据查询速度的对象
索引表的维护由Oracle自己维护,我们只需要在合适的列上创建索引即可
2、创建示例
1)、单列索引:基于表中单个列建立的索引
create index my_index on product(name);
2)、复合索引:基于表中两个或者多个列的索引
create index my_index on product(name, price);
四、同义词(别名)
1、定义
同义词就是别名,可以为表、字段名建立别名,主要是为了简化书写
在当前用户下创建同义词需要 create synonym 权限
2、语法
create [ public ] synonym 名称 for object;
public 表示这是一个共有同义词,任何用户都可以使用这个同义词
3、示例
创建:
create public synonym my_p for product;
使用:
select * from my_p;