数据库对象:视图、序列、索引、同义词

2018-07-28  本文已影响0人  滴滴滴9527

一、视图

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;
上一篇 下一篇

猜你喜欢

热点阅读