设为首页 加入收藏

TOP

Oracle08、视图+同义词+序列+索引(二)
2017-10-16 18:20:01 】 浏览:1800
Tags:Oracle08 视图 同义词 序列 索引
是删除基表之后就会影响到同义词。

三、序列

什么是序列【Sequence】
(1)类似于MySQL中的auto_increment自动增长机制,但Oracle中无auto_increment机制
(2)是oracle提供的一个产生唯一数值型值的机制
(3)通常用于表的主健值
(4)序列只能保证唯一,不能保证连续
     声明:oracle中,只有rownum永远保持从1开始,且继续
(5)序列值,可放于内存,取之较快
 
为什么oracle不直接用rownum做主健呢?
rownum=1这条记录不能永远唯一表示SMITH这个用户,但主键=1确可以永远唯一表示SMITH这个用户

为什么要用序列
(1)以前我们为主健设置值,需要人工设置值,容易出错
(2)以前每张表的主健值,是独立的,不能共享

/*为emp表的empno字段,创建序列emp_empno_seq,create sequence 序列名*/
create sequence emp_empno_seq;

/*删除序列emp_empno_seq,drop sequence 序列名*/
drop sequence emp_empno_seq;

/*查询emp_empno_seq序列的当前值currval和下一个值nextval,第一次使用序列时,必须选用:序列名.nextval*/
select emp_empno_seq.nextval from dual;
select emp_empno_seq.currval from dual;

/*使用序列,向emp表插入记录,empno字段使用序列值*/
insert into emp(empno) values(emp_empno_seq.nextval);
insert into emp(empno) values(emp_empno_seq.nextval);
insert into emp(empno) values(emp_empno_seq.nextval);

/*修改emp_empno_seq序列的increment by属性为20,默认start with是1,alter sequence 序列名*/
alter sequence emp_empno_seq
increment by 20;

/*修改emp_empno_seq序列的的increment by属性为5*/
alter sequence emp_empno_seq
increment by 5;

/*修改emp_empno_seq序列的start with属性,行吗?*/
alter sequence emp_empno_seq
start with 100;--无法变更启动号错误

/*有了序列后,还能为主健手工设置值吗?*/
insert into emp(empno) values(9999);
insert into emp(empno) values(7900);--可以
select * from emp;--测试插入值情况

删除表,会影响序列吗?
你无法做insert操作

删除序列,会影响表吗?
表真正亡,序列亡

在hibernate中,如果是访问oracle数据库服务器,那么User.hbm.xml映射文件中关于<id>标签如何配置呢?

<id name="id" column="id">
   <generator class="increment/identity/uuid/【sequence】/【native】"/>
</id>

四、索引

什么是索引【Index】
(1)是一种快速查询表中内容的机制,类似于新华字典的目录
(2)运用在表中某个/些字段上,但存储时,独立于表之外

为什么要用索引
(1)通过指针加速Oracle服务器的查询速度
(2)通过rowid快速定位数据的方法,减少磁盘I/O
     rowid是oracle中唯一确定每张表不同记录的唯一身份证

rowid的特点
(1)位于每个表中,但表面上看不见,例如:desc emp是看不见的
(2)只有在select中,显示写出rowid,方可看见
(3)它与每个表绑定在一起,表亡,该表的rowid亡,二张表rownum可以相同,但rowid必须是唯一的
(4)rowid是18位大小写加数字混杂体,唯一表代该条记录在DBF文件中的位置
(5)rowid可以参与=/like比较时,用''单引号将rowid的值包起来,且区分大小写
(6)rowid是联系表与DBF文件的桥梁

索引的特点
(1)索引一旦建立, Oracle管理系统会对其进行自动维护, 而且由Oracle管理系统决定何时使用索引
(2)用户不用在查询语句中指定使用哪个索引
(3)在定义primary key或unique约束后系统自动在相应的列上创建索引
(4)用户也能按自己的需求,对指定单个字段或多个字段,添加索引

什么时候【要】创建索引
(1)表经常进行 SELECT 操作
(2)表很大(记录超多),记录内容分布范围很广
(3)列名经常在 WHERE 子句或连接条件中出现
注意:符合上述某一条要求,都可创建索引,创建索引是一个优化问题,同样也是一个策略问题
       
什么时候【不要】创建索引
(1)表经常进行 INSERT/UPDATE/DELETE 操作
(2)表很小(记录超少)
(3)列名不经常作为连接条件或出现在 WHERE 子句中
注意:符合上述某一条要求,不要创建索引,创建索引是一个优化问题,同样也是一个策略问题

/*为emp表的empno单个字段,创建索引emp_empno_idx,叫单列索引,create index 索引名 on 表名(字段,...)*/
create index emp_empno_idx
on emp(empno);

/*为emp表的ename,job多个字段,创建索引emp_ename_job_idx,多列索引/联合索引*/
create index emp_ename_job 
on emp(ename,job);
如果在where中只出现job不使用索引
如果在where中只出现ename使用索引
我们提倡同时出现ename和job
注意:索引创建后,只有查询表有关,和其它(insert/update/delete)无关,解决速度问题

/*删除emp_empno_idx和emp_ename_job_idx索引,drop index 索引名*/
drop index emp_empno_idx;
drop index emp_ename_job_idx;

注意:以上内容只是笔者作为一个初学Oracle的菜鸟进行的总结,并不全面,读者请根据自己实际情况进行学习。

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle06、增删改数据 下一篇Oracle07、事务+Oracle访问其他用..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目