在Oracle中创建表时,在给表字段指定属性时是没有,auto_increment 这个自动增长的属性的,在Oracle中要使用 序列(sequence)和 触发器(trigger)来实现。
例子:
首先创建一个用于测试的表 AzroadLog
create table AzroadLog ( id number(12) primary key, -- 主键 operation_user varchar2(20), );
然后我们创建一个序列,用于指定 生成 主键的 值,当然在序列中可以设置很多属性。
--创建自增序列 create sequence test_sequence increment by 1 -- 自动增长1 start with 1 -- 初始值为1 nomaxvalue -- 不设置最大值 nocycle -- 不循环 nocache; -- 不缓存
最后创建触发器,创建一个行触发器,当我们向表 AzroadLog 中插入一行数据时触发。
create or replace trigger insert_test before insert on AzroadLog -- 指定表名 for each row -- 这里表示每一行都会触发 begin select test_sequence.nextval into : new.id form dual; end; 在insert触发器中赋值时只能使用new,而不能使用old,因为开始表中是不存在任何数据的。
完成上面三个步骤,执行插入语句的SQL会发现插入成功:
insert into AzroadLog(operation_user) values('admin');