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>