在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景。那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger。
就是利用Oralce的序号和触发器来实现字段的自增,下面直接来看一个完整的例子。
一、创建表结构
这里我们简单创建一张表做例子,其中表中的id字段就是我们后面准备用来作为自增的字段。
create table T_EMP(ID NUMBER not null,EMP_CODE VARCHAR2(64),EMP_NAME VARCHAR2(64));
二、创建序列(sequence)
这里创建自增序列,用于后面和上表的关联。
CREATE SEQUENCE T_EMP_SEQUENCEMINVALUE 1 --最小值NOMAXVALUE --不设置最大值START WITH 1 --从1开始计数INCREMENT BY 1 --每次加1NOCYCLE --一直累加,不循环NOCACHE; --不建缓冲区
三、创建触发器(trigger)
创建触发器,把表和序列关联起来,并设定每当表中新增数据的时候触发。
代码如下,
CREATE OR REPLACE TRIGGER T_EMP_TRIGGER BEFORE INSERT ON T_EMP FOR EACH ROW WHEN(NEW.ID IS NULL)BEGIN SELECT T_EMP_SEQUENCE.NEXTVAL INTO:NEW.ID FROM dual;END;
四、测试
上面sequence和trigger都创建好之后,就可以添加数据测试了。这里我们直接insert几条数据,注意看id字段的变化就可以了。
INSERT INTO T_EMP (EMP_CODE, EMP_NAME)VALUES ('zhangsan', '张三');INSERT INTO T_EMP (EMP_CODE, EMP_NAME)VALUES ('lisi', '李四');INSERT INTO T_EMP (EMP_CODE, EMP_NAME)VALUES ('wangwu', '王五');
我们看下结果,
从上图看出,已经实现表中id字段的自增,大功告成。