当前位置:   article > 正文

Oracle索引、触发器及序列相关_oracle多个唯一索引

oracle多个唯一索引

Oracle索引

  1. 普通索引:

CREATE INDEX 索引名 ON 表名(列名);

  1. 复合索引:

CREATE INDEX 索引名 ON 表名(列名1, 列名2, 列名3, ...);

  1. 唯一索引(复合唯一索引):

create unique index 唯一索引名 on 表名(字段1,字段2..);

  1. 删除索引:

drop index 索引名;

  1. 查询索引:

—根据索引名,查询表索引字段
select * from user_ind_columns where index_name='索引名';

—根据表名,查询一张表的索引
select * from user_indexes where table_name='表名';

Oracle触发器

语法:

create [or replace] trigger trigger_name --触发器名称
instead of trigger_event --触发事件
on view_name --视图名称
for each row --替代触发器必须指定为行级的触发器
[when trigger_condition] --触发条件
trigger_body --触发体,PL/SQL块

exp:

创建触发器:实现id的隐式自增
create or replace trigger tri_match_diff
before insert on T_MATCH_DIFF_RESULT
for each row
declare
next_id number;
begin
select seq_match_diff_result_id.nextval into next_id from dual;
:new.id :=next_id;
end;

Oracle序列

  • 创建序列

和mysql中使用auto_increment不同,oracle中使用序列来实现主键自增,使用序列前必须要先创建一个序列:

create sequence seq_sale_id序列名称
increment by 1 每次增长多少
start with 1 从几开始
minvalue 1 最小值
maxvalue 999999999 最大值
cycle/no cycle 序列到达最大值之后怎么办,一般去cycle
cache 20 需要不需要使用缓存,就是一次生成多少个序列的值,如果生成了多个序列值,如果缓存中有数据, 就不需要查询缓存了
order/noorder 获取序列的时候是否按顺序给值。如果多用户一起获取序列的值,使用order可以保证序列值的顺序按访问序列的事件排序

exp:

create sequence seq_name
increment by 1
start with 1
minvalue 1
maxvalue 9999999
cache 20
cycle;

  • 序列相关使用

使用序列获取序列的下一个值:

select seq_name.nextval from dual

获取序列的当前值:

select seq_name.currval from dual

插入数据时

insert into table(id,name) values(seq_name.nextval,'test')

删除序列

dorp sequence [用户名.]seq_name

修改序列

alert sequence seq_name increment by 10 nomaxvalue nocycle cache 10
修改序列只能修改这几个值,不能修改初始值

查看序列

查看当前用户下的所有序列:
select * from user_sequences
查看所有用户下的所有序列:
select * from all_sequences
select * from dba_sequences

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/892728
推荐阅读
相关标签
  

闽ICP备14008679号