oracle如何实现主键自动增长。
exe_sql ="insert into orders(id,name,remark) values (-1,'Bee(ORM Framework)','InsertAndReturnId')";
id值设为-1,在oracle设置了序号和触发器,可以自动插入递增的id.且可以通过jdbc驱动返回。
即使用了分布式id,有触发器还是会把该值改了的。
pst = conn.prepareStatement(exe_sql, new String[]{"id"}); //mysql 用idaaa也能接收. oracle不行
num = pst.executeUpdate();
ResultSet rsKey = pst.getGeneratedKeys();
rsKey.next();
returnId = rsKey.getLong(1);
System.out.println("----------------"+returnId);
--oracle触发器。
create or replace trigger trg_orders
before insert
on orders
for each row
declare
begin
select orders_id.nextval into:new.id from dual;
end trg_orders;
通过以上分析,oracle自身的id增长并不是很好用, 性能也不是太好,处理不好,还容易锁表.
可以使用ORM Bee自带的分布式id, 既满足分布式唯一的要求, 本地生成也比较快.