如何在oracle中自动增加id?

时间:2014-11-18 08:37:05

标签: oracle oracle-sqldeveloper auto-increment

有没有办法在oracle中自动增加id?

UPDATE:它正在工作,但序列从2开始而不是1.我已经将序列开始设置为1

如果有可能不使用序列,但仍然会自动增加id?

下面:

  CREATE TABLE tblname
  ( 
   fieldname_id number(25),
   contract_number number(12) not null,
   CONSTRAINT letter_status_pk PRIMARY KEY (fieldname_id, contract_number)
  );

序列w /触发器:

  create sequence fieldname_id_sequence start with 1
  increment by 1
  minvalue 1;

  create trigger tr_tblname
  before insert on tblname               
  for each row  
  begin   
  select fieldname_id_sequence.nextval into :NEW.fieldname_id from dual;
  end;

插入数据:

insert all
  into tblname(contract_number,fieldname1,fieldname2,fieldname3,fieldname4,fieldname5,fieldname6,fieldname7,fieldname8,fieldname8,fieldname10,fieldname11) values(3300026224,'values','values','values','3/12/2014','values','values','3/18/2014','3/7/2014','values','values')
  into tblname(contract_number,fieldname1,fieldname2,fieldname3,fieldname4,fieldname5,fieldname6,fieldname7,fieldname8,fieldname8,fieldname10,fieldname11) values (3300016335,'values','values','values','3/12/2014','values','values','3/18/2014','3/7/2014','values','values')
  select 1 from dual;

2 个答案:

答案 0 :(得分:1)

您可以使用序列和触发器轻松建模:

Create sequence sequence_name start with value increment by value minvalue value maxvalue value;

首先,让我们在emp_id列上创建一个带有主键约束的emp表。

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;

现在我们创建了一个名为emp_sequence的序列对象,起始值为1,从1(minvalue)到10000(maxvalue)递增1

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_sequence中的下一个数字分配给emp表中的emp_id列。

答案 1 :(得分:1)

Oracle 12c 介绍IDENTITY COLUMNS

SQL> CREATE TABLE new_identity_table
  2    (
  3      ID   NUMBER GENERATED ALWAYS AS IDENTITY,
  4      text VARCHAR2(50)
  5    );

Table created.

SQL>
SQL> INSERT
  2  INTO new_identity_table
  3    (
  4      text
  5    )
  6    VALUES
  7    (
  8      'This table has an identity column'
  9    );

1 row created.

SQL> column text format A40;
SQL>
SQL> select * from new_identity_table;

        ID TEXT
---------- ----------------------------------------
         1 This table has an identity column

SQL>

Oracle创建sequence来填充identity column。您可以找到它命名为ISEQ$$

SQL> select sequence_name, min_value, max_value, increment_by from user_sequences;

SEQUENCE_NAME         MIN_VALUE  MAX_VALUE                     INCREMENT_BY
-------------------- ---------- ----------------------------   ------------
ISEQ$$_93199                  1 9999999999999999999999999999   1

SQL>

有关标识列的更多信息,请使用ALL_TAB_IDENTITY_COLS视图。

SQL> SELECT table_name,
  2         column_name,
  3         generation_type,
  4         identity_options
  5  FROM   all_tab_identity_cols
  6  WHERE  owner = 'LALIT'
  7  ORDER BY 1, 2;

TABLE_NAME           COLUMN_NAME     GENERATION IDENTITY_OPTIONS
-------------------- --------------- ---------- --------------------------------------------------
NEW_IDENTITY_TABLE   ID              ALWAYS     START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999
                                                999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N
                                                , CACHE_SIZE: 20, ORDER_FLAG: N


SQL>
相关问题