一、序列
1.序列是数据库中为数据表提供的可以自动生成的唯一数值, 通常用来给主键字段赋值。可以递增或者递减。作为主键的字段,通常不人为赋值,需要使用序列自动生成的值。
2.序列关键字 sequence 序列和表一样,都是数据库中的对象。通常序列为一张表提供主键值。也可以为多张表的主键提供主键值。
3.序列的创建
create sequence seqName
[start with i] -- 从i开始 不指定时默认从1开始
[increment by j]-- 每次递增或递减j/ 默认递增1, j:为正值时,表示递增为负值时,表示递减
[maxvalue m|nomaxvalue]--表示最大值m
[minvalue n|nominvalue]--表示最小值n
[cycle|nocycle]--表示循环|不循环
[cache n|nocache]--表示缓存n个数. 默认存储20个数。
--练习:创建序列 seq_emp 从 10000开始,每次增加10,最大值10100,最小值 9900 可循环。
create sequence seq_emp start with 10000 increment by 10 maxvalue 10100 minvalue 9900 cycle;
4.序列中的两个伪列。
nextval:下一个值。
currval: 当前值,此伪列只有在使用了nextval伪列后,才可以使用。
select seq_emp.nextval from dual;
select seq_emp.currval from dual;
二、序列的综合来使用
--练习:创建表 employee 字段empno,number(4) 设计成主键约束,ename,varchar(20),非空约sal,number(9,2)
drop table employee;
create table employee (
empno number(4) primary key,
ename varchar2(20) not null,
sal number(9,2)
);
--创建序列 seq_employee 从1000开始,每次增加1,插入数据,模拟3条
drop sequence seq_employee;
create sequence seq_employee start with 1000;
select seq_employee.nextval from dual;
select seq_employee.currval from dual;
insert into employee values(seq_employee.nextval,'张三',3000);
insert into employee values(seq_employee.nextval,'李四',4000);
insert into employee values(seq_employee.nextval,'王五',5000);
commit;
select * from employee;