oracle数据库的操作3--序列、索引、视图

1.序列

   (oracle里面使用序列式主键增加)

是一数据库对象,利用它可生成唯一的整数。
   一般使用序列自动地生成表主键值或唯一键值
   不直接连接到数据库中的任何表

①语法

create sequence [user.]sequence_name
       [increment by n]
       [start with n]
       [maxvalue n|]
       [minvalue n ]
       [cache]
       [nocycle|cycle]
       
     increment by: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
     start with:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
     maxvalue:指定序列可生成的最大值。
     minvalue:指定序列的最小值
     nocycle:一直累加,不循环
     cycle:累加到最大值循环

一般只需要些第一个,其他都要默认值:(创建序列,需要序列的权限)
create sequence seq_test;

②mysql 和 oracle 主键递增的区别

mysql:在表结构里面存储了最大了索引(保存在磁盘中),每次添加都需要获取后,再之前的基础上加1,操作方便
        不足:并发高的时候,可能两个线程同时获取索引,引发错误。
oracle:使用序列:利用缓存,提前将批量索引放在缓存里(默认20个),缓存在内存中,获取速度快。
        优势:提高获取主键值的性能,出现大量并发的获取主键值,适当增加[cache]缓存大小
        不足:1.序列值可能是不连续的。
              2.为了保证每个表都用一个序列,所以需要建立多个序列

③获取序列

-获取当前序列值(第一次的时候没有值,会报错;有值后就不会报错了)
select seq_test.currval from dual;
--获取下一个序列的值
select seq_test.nextval from dual;

④使用序列插入表

insert into employees_bck(Employee_id,first_name,last_name) values(seq_test.nextval,'刘','星')

⑤查看用户定义的序列

查询部分信息

select t.sequence_name,t.min_value,t.max_value,
                   t.increment_by  from user_sequences t;

查询所有信息

select t.*  from user_sequences t;

⑥修改序列

修改序列:
     ALTER  SEQUENCE [user.]sequence_name [INCREMENT BY n] [MAXVALUE n] [MINVALUE n];
修改序列可以:
     修改未来序列值的增量。
     设置或撤消最小值或最大值。  ?
     改变缓冲序列的数目。   
     指定序列号是否是有序。
注意:1,第一次NEXTVAL返回的是初始值
     2,可以修改除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
例如:
     alter sequence  emp_seq
           increment by 2
           minvalue 3
           maxvalue 99999

⑦删除序列

语法:
DROP SEQUENCE [user.]sequence_name;--用于从数据库中删除一序列。
例如:
Drop  sequence  emp_seq

2.索引

①索引阐述:
      在 Oracle数据库中用来加速对表的查询
      通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
      与表独立存放
      由 Oracle数据库自动维护

②哪些值可以创建索引
1.外键一般要创建索引
2.经常使用的查询条件要创建索引。如果使用like ‘%’操作,不会使用索引。
     like 'a%  'a_'会使用索引
     like  '%a'    不会使用索引,
           通过反转索引,可实现利用索引:select * from employees where reverse(name) like reverse('%abc');
    like '%a%'     不会使用索引,造成全表扫描,看数据库表的数量的大小,500万以下

            解决查询效率方案:分库(读数据库,写数据库)

                                            分表(往年数据变成一张只读表,今年的数据也是一张表)

3.索引不是越多越好,因为新的索引,会改变索引的存储顺序
4.不要在可选值很少的属性上面创建索引:性别等;
5.对于那些定义为text, image和bit数据类型的列不应该增加索引
6.当修改性能远远大于检索性能时,不应该创建索引(分库分表:把往年查询的数据放到一个只读的表空间)

③创建索引

语法:
在一列或者多列上创建索引.
 CREATE INDEX index
 ON table (column[, column]...);

例如:
create index index_role_name
on t_role(name);

④删除索引

 DROP INDEX index;(index为索引)
为了删除索引,必须拥有索引或者拥有 DROP ANY INDEX 权限

3.视图

①理解

视图也就是虚表,实际上视图就是一个命名的查询,用于改变基表数据的显示。

   可以限制对数据的访问
   可以使复杂的查询变的简单
   提供了数据的独立性
   提供了对相同数据的不同显示
②语法:
在CREATE VIEW语句后加入子查询.
CREATE [OR REPLACE] VIEW view
     [(alias[, alias]...)]
     AS subquery
     [WITH READ ONLY];  --加了这一句之后,只能查询
例如:
create or replace view v_emp
(id,name,salary)
as
select employee_id,first_name||last_name,salary
from employees_bck;     

注意:1.需要用视图权限,创建好之后,会生成像表一样的视图,但是只能查询和删除,不能修改和插入。
      2.必须加上with read only,加上之后,只能查询。
      3.创建视图需要验证表,列名是否正确
      4.视图可以提交查询性能,因为视图相当于查询出来放在缓存中。

③删除视图
DROP VIEW view_name;

3.表空间

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值