序列(重点)
在很多数据库系统中都存在一个自动增长的列,如果现在要想在Oracle中完成自动增长的
功能,则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。
序列的创建格式:
CREATE SEQUENCE sequence
[INCREMENT BY n][START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
eg:创建一个myseq的序列,验证自动增长的操作。
CREATE SEQUENCE myseq ;
序列创建完成之后,所有的自动增长应该由用户自己处理,
所以在序列中提供了一下的两种操作:
eg:建立一张表,验证序列的操作。
CREATE TABLE testseq(
);
eg:
INSERT INTO testseq(next,curr) VALUES (myseq.nextval,myseq,currval) ;
将以上的序列执行5次。
eg:查询表testseq,观察序列的变化。
SELECT * FROM testseq ;
从结果中发现,nextval的值始终在进行自动增长的操作,
而curr使用取出当前操作的序列结果。
也就是说,现在的这种序列,每次增长的幅度是1,那么也可以修改序列的增长幅度。
eg:重新建立序列
删除序列:DROP SEQUENCE myseq ;
重新创建序列:CREATE SEQUENCE myseq INCREMENT BY 2 ;
此时,序列已经正常的创建,创建之后来测试一下,序列的操作,
重新创建testseq表,为了可以说明问题,现在将testseq表重新建立
重新执行数据的插入操作,插入5次数据
INSERT INTO testseq(next,curr) VALUES (myseq,nextval,myseq,currval) ;
从序列的结果来看,每次取的都是奇数。
默认情况下,序列从1开始的,那么可以使用START WITH
CREATE SEQUENCE mysql INCREMENT BY 2 START WITH 10 ;
下面重新创建一个序列,让其取值固定在1、3、5、7、9,循环序列。
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq MAXVALUE 10 INCREMENT BY 2 START WITH 1
CACHE 2 CYCLE ;
重新建立testseq表,插入数据,测试最终结果,可以发现序列的内容现在是
循环的操作。但是从实际来看,序列使用最多的语法:CREATE SEQUENCE
-----------
===========
同义词(了解)
之前一直存在这样的一种查询语句:
SELECT SYSDATE FROM dual;
如果现在使用system连接数据库,查询一下此张表是否属于system用户。
CONN system/manager ;
SELECT * FROM tab;
SELECT * FROM tab WHERE TNAME='DUAL' ;
CONN sys/change_on_install AS SYSDBA ;
SELECT * FROM tab WHERE TNAME='DUAL' ;
那么正常情况下如果访问不同用户的表需要使用“用户名.表名称”。
方便的访问“用户名.表名称”.
创建同义词的语法:
CREATE SYSONYM 同义词名称 FOR 用户名.表名称 ;
eg:将scott.emp定义为emp的同一词。
CREATE SYSNOYM emp FOR scott.emp ;
show user ;
删除一个同义词:
DROP SYSNONYM 同义词名称 ;
eg:删除emp的同义词
DROP SYSNONYM emp;