使用Oracle实现自动增长主键(oracle设置主键自增)
Oracle中可以使用序列对象(Sequence Object)实现自动增长的主键。
首先,我们有必要创建一个序列对象,这个步骤可以使用Oracle数据库自带的dbms_sequence包。 例如创建一个名为PK_SEQ的序列:
“` sql
CREATE SEQUENCE pk_seq
START WITH 10000
INCREMENT BY 1
MINVALUE 10000
NOMAXVALUE
NOCYCLE
CACHE 20;
上述代码实现了主键从10000开始,每次递增1,不存在最大值,也不存在循环值,缓存20个值的序列。
序列创建完毕后,就可以使用简单的SELECT语句来获取序列的下一个值:
```sqlSELECT pk_seq.nextval FROM DUAL;
另外,序列也可以被用在列的定义中,可以使用如下代码实现一个自动递增的主键列:
“`sql
CREATE TABLE employees(
emp_id number primary key,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
salary NUMBER
);
ALTER TABLE employees
ADD (emp_id number GENERATED BY DEFAULT AS IDENTITY
start with 10000
increment by 1 primary key);
使用上述代码,当新行插入时,emp_ID列将由序列pk_seq自动生成,而无需显式插入任何值。
最后,我们还可以使用触发器(triggers)也能实现自动增长的主键,例如:
```sqlCREATE or REPLACE TRIGGER gen_employee_id
BEFORE INSERT ON employees FOR EACH ROW
BEGIN SELECT pk_seq.nextval INTO :NEW.emp_id FROM dual;
END;
当然,使用触发器来实现自增主键,并不总是一个好主意,它可能会影响数据库性能。
综上,使用Oracle实现自动增长主键,最常用的方法是使用序列对象,当然也可以通过触发器实现,但这并不总是一个最优的性能选择。