Oracle自动递增
我需要创build一个序列和触发器来自动递增表上的主键,但我不知道如何做到这一点。
创build表格和序列
SQL> create table staff ( 2 emp_id number primary key, 3 staff_name varchar2(100) 4 ); Table created. SQL> create sequence emp_id_seq; Sequence created.
现在,您可以创build一个使用序列填充主键的触发器
SQL> create trigger trg_emp_id 2 before insert on staff 3 for each row 4 begin 5 select emp_id_seq.nextval 6 into :new.emp_id 7 from dual; 8 end; 9 / Trigger created.
现在,当你插入数据时,你不需要指定EMP_ID
列 – 它会自动填充触发器
SQL> insert into staff( staff_name ) values ('Justin'); 1 row created. SQL> select * from staff; EMP_ID STAFF_NAME ---------- -------------------- 1 Justin
阅读此文,美丽的文章。
如何顺序[在oracle中自动增量]
句法
Create sequence sequence_name start with value increment by value minvalue value maxvalue value;
例
SQL> create table emp ( emp_id number(10), fname varchar2(25), lname varchar2(25), constraint pk_emp_id PRIMARY KEY(emp_id) ); SQL> Create sequence emp_sequence start with 1 increment by 1 minvalue 1 maxvalue 10000; SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Darvin','Johnson'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Mig','Andrews'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Alex','Martin'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Jon','paul'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Yatin','Bones');
在emp_sequence.nextval
, emp_sequence
是我们上面创build的序列的名称, nextval
是一个函数,用于将next number from emp_sequence to emp_id
的next number from emp_sequence to emp_id
emp表中的next number from emp_sequence to emp_id
列。
SQL> select * from emp; EMP_ID FNAME LNAME ---------- ------------------------- ------------------------- 1 Darvin Johnson 2 Mig Andrews 3 Alex Martin 4 Jon paul 5 Yatin Bones
尝试这个:
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,'Ram')
非常好的问题! 可能序列可能以这种方式使用 – 另外,我不确定是否真的有区别:
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
如果你使用多个表的序列,因为序列的值是不一致的例子:我们有两个表emp和depeartement:如果我使用emp的序列,我会有:ID_dept = 6,因为5已经在另一个表。
例如:
SQL> insert into emp values(masequence.nextval,'aaa');
1 lignecrÚÚe。
SQL> insert into departement values(masequence.nextval,'aaa');
1 lignecrÚÚe。
SQL> select * from emp; ID_EMP NOM_EMP ---------- ------------------------- 5 aaa SQL> select * from departement; ID_DEPT NOM_DEPT ---------- ---------- 6 aaa SQL>