接触oracle没多久,在建表的时候发现还不会如何设置主键自动增长。和mysql的设置为AUTO_INCREMENT属性相比,要复杂很多,所以现在记录起来。
我使用的是序列+触发器的方式。
现在已经创建好一个tbl_dept表,比较简单就两个字段。建表语句如下:
-- Create table create table TBL_DEPT ( dept_id INTEGER not null, dept_name VARCHAR2(255) not null ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 128K next 1M minextents 1 maxextents unlimited ); -- Create/Recreate primary, unique and foreign key constraints alter table TBL_DEPT add constraint PK_DEPT primary key (DEPT_ID) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );
表有了之后我们首先需要创建一个用来实现自动增长的序列:
create sequence sql_dept minvalue 1 --最小值 nomaxvalue --不设置最大值 start with 1 --从1开始计数 increment by 1 --每次加1个 nocycle --一直累加,不循环 nocache; --不建缓冲区
最后我们只需要再把触发器设置好就行了:
create or replace trigger tg_dept before insert on tbl_dept --tbl_dept:表名 for each row declare nextid number; begin IF :new.dept_id IS NULL or :new.dept_id=0 THEN --dept_id:列名 select sql_dept.nextval --sql_dept:序列 into nextid from sys.dual; :new.dept_id:=nextid; end if; end tg_dept;
插入前:
我们现在通过插入语句来测试一下吧,我们插入的语句中主键dept_id为空:
insert into tbl_dept(dept_name) values('人事部');
结果: