首页 文章

Oracle的自动增量

提问于
浏览
19

我需要创建一个序列和一个触发器来自动增加表上的主键,但我不知道如何做到这一点 .

5 回答

  • 24

    创建表和序列

    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.
    

    现在,您可以创建一个使用序列填充主键的触发器

    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
    
  • 9

    阅读这篇美丽的文章 .

    如何序列[auto increment in 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 是我们在上面创建的序列的名称, nextval 是一个用于在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
    
  • 21

    试试这个:

    create sequence seq_EmpID start with 1 increment by 1
    
    insert into Emp_Table values(seq_EmpID.nextval,'Ram')
    
  • -1

    非常好的问题!!可能会以这种方式使用序列 - 同样,我不确定是否确实存在差异:

    CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
    
  • 0

    如果你对几个表使用一个序列,因为序列的值是不一致的例子:我们有两个表emp和depeartement:如果我在emp上使用序列我会有:ID_dept = 6因为5已经在另一个中使用了表 .

    例如:

    SQL> insert into emp values(masequence.nextval,'aaa');
    

    1lignecrÚ .

    SQL> insert into departement values(masequence.nextval,'aaa');
    

    1lignecrÚ .

    SQL> select * from emp;
    
        ID_EMP NOM_EMP
    ---------- -------------------------
             5 aaa
    
    SQL> select * from departement;
    
       ID_DEPT NOM_DEPT
    ---------- ----------
             6 aaa
    
    SQL>
    

相关问题