创建序列
-
sequencename:序列对象的名字
-
INCREMENT BY n:序列每次增加值,默认为1。
-
START WITH n :序列起始值n,该项省略,起始值为1
-
MAXVALUE n :序列最大值
-
NOMAXVALUE :指定序列无最大值
-
MINVALUE n :序列最小值;
-
NOMINVALUE :指定序列无最小值
-
CYCLE|NOCYCLE:表示序列在达到最大值或最小值之后是否继续产生序列值,NOCYLE表示不再产生,NOCYLE是默认选项。
-
CACHE n|NOCACHE:表示序列值被服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项
例:创建序列test_seq,起始值为10,每次增长2,最大值100,最小值9,循环序列,每次缓存10
create sequence test_seq
start with 10
increment by 2
maxvalue 100
misvalue 9
cycle
cache 10
使用序列
- 使用序列test_seq生成dept表中deptno列插入值:
insert into dept
values (test_seq.nextval,yanfabu,dalasi,)
练习
- 创建一个序列,该序列起始值从1开始,无最大值,增量是1,不循环。
CREATE sequence asd_seq
- 查询序列的当前值及下一个值
SELECT asd_seq.nextval FROM DUAL
SELECT asd_seq.currval FROM DUAL
- 使用第1题所建的序列,向部门表中插入两条记录,部门编号使用序列值,部门名称分别为:Education、Market,城市分别为:DALLAS、WASHTON
INSERT INTO dept
VALUES (asd_seq.nextval,'education','dallas')
INSERT INTO dept
VALUES (asd_seq.nextval,'maeket','washton')
修改序列
alter sequence test_seq
increment by 4
maxvalue 1000
nocache
修改序列的语法没有START WITH子句。
删除序列
drop sequence test_seq (序列名)
创建索引
- 自动创建: 当有 PRIMARY KEY 或者 UNIQUE 约束时,数据库会自动创建一个索引。
- 手动创建:
create index idx_emp_ename(索引名)
on emp(ename)
例:在emp表的deptno和job的组合上创建索引
create index idx_emp_deptnojob
on emp(deptno,job)
练习
- 使用子查询的方式,创建test表。
create TABLE test
AS
SELECT * from emp
- 快速复制test表中的数据,复制到100w条左右
INSERT INTO test
SELECT * FROM emp
- 更新test表中的empno字段为rownum
UPDATE TEST SET EMPNO=ROWNUM
- 查询test中empno为800000的记录值,记录查询执行时间。
SELECT * FROM TEST
WHERE empno=800000
- 在test表的empno字段上创建索引
CREATE INDEX IDX_TEST_EMPNO
ON test(empno)
- 重新执行第4题,对比查询时间
SELECT * FROM TEST
WHERE empno=800000
删除索引
drop index idx_emp_ename(索引名)
网友评论