数据库序列,视图,索引

1.序列(SEQUENCE)

对应的数据库字典:user_sequences

创建序列语法:

create sequence 序列名

start with n 表示从几开始,默认值是1

increment by n 每计数一次增加多少,默认是1

maxvalue n 序列最高峰值n

minvalue n 序列最低峰值n

cache n 提供n个预分配的序列,保存在内存中

cycle | nocycle 是否循环

oredr | noorder 有序还是无序序列

例如:

--给员工创建一个序列

create sequence tbl_emp_id start with 4;

如何使用序列?

nextval:取序列的下一个值(tbl_emp_id.nextval)

currval:取序列的当的前值(tbl_emp_id.currval)

在插入数据时使用:

insert into tbl_emp values(tbl_emp_id.nextval,....)

删除序列:

drop sequence 序列名;

2.索引(INDEX)

对应的数据词典user_indexes

作用是可以有效的提高数据库的查询效率(数据库性能优化)

创建索引的两种方式:

1.自动创建

当表中的列添加了主键约束或者唯一性约束时,则系统会自动为此列创建唯一性的索引,索引名就是约束名

2手动创建

语法:

create index 索引名 on 表名(列名...);

索引有自己独立的储存空间和命名空间,创建索引也会相对牺牲一些数据库性能

索引的原理:

1.默认情况下,索引是采用BTree(二叉树)的数据结构

2.伪劣(rowid),存放的数据行记录的正真“物理地址”。

  --根据某物理地址查询某一行记录

  //先获取记录的rowid

  select rowid from s_emp where first_name="Carmen";

  //根据行记录rowid查找相应的记录

  select* from s_emp where rowid='............'

3.索引建立的原理:

  把创建索引的列值与rowid合成一个键值树,这个键值对就是索引,然后把它们存放到指定的数据结构中(二叉树,位图)中,并且是独立的索引空间

4.索引查询的原理:

  当我们的查询语句中where 条件的列建立了索引,则查询分为一下2步:

  a.先查索引,在句列中的值直接找到rowid

  b.根据第一步得到的rowid直接定位到相应的行记录结束查询

5.建立索引的策略:

  a.主键和唯一性列 合适

  b.不经常发生改变的列 合适

  c.满足以上两个条件,经常做查询的列 合适

  d.重复值太多的列 不合适

  e.null值太多的列 不合适

6.删除索引

drop index 索引名;

视图(VIEW)


对应的数据字典:user_view

他是一个数据库对象,它的表格的一个“窗口”,用来保存查询语句的对象,视图是依附与表的,并且与表格共享储存空间。

定义:本质就是一条合法的查询语句

作用:

  1.配合权限,根据业务来做分级管理

  2.减少复杂性,增加数据的安全性

创建视图的语法:

  create view 视图名 as 子句;

  with read only ;视图只读

  with check option

例如:

--以只读方式创建s_emp表中id,salary两列的视图

create view view_name as select id,salary from s_emp with read only;

注意:操作视图必须拥有一定的权限

删除视图

drop view 视图名;

视图分类:

关系视图,内嵌视图,对象视图,物化视图

-----------------------------
补充:查询当前用户可执行什么操作

select * from session privs;

--查询某个权限可执行的所有操作

select* from DBA_SYS_PRIVS where grantee='DBA';(需要DBA)

--查询当前用户被赋予的系统角色

select *from SESSIONS_ROLES order by role;

--授予权限的两种方式:

1.grant createany view to 用户名

2.grant connect,resource,dba to 用户名

原文地址:https://www.cnblogs.com/wangqun1234/p/7814578.html