使用ROWNUM
洮北ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
这样每次插入的时候都是根据行数来重新生成的这个值。
如果你想从1开始。那就INSERT
INTO
...
select
ROWNUM
AS
ID.....
从2开始就
INSERT
INTO
...
select
ROWNUM+1
AS
ID.....
使用oracle数据库中的关键字sequence来实现目的。
//创建mySeq
create sequence mySeq
start with 1
increment by 2
maxvalue 40
minvalue 1
cycle
//创建用户表
create table USER
(
Id int,
CompName varchar2(20)
)
插入语句可以这样写:
insert into USER values(mySeq.nextVal,'AA')
这样的话每次插入的ID就是自动递增的
扩展资料:
sequence用法:
create sequence 序列名称
start with 起始数
increment by 增长量
[maxvalue 值]
[minvalue 值]
[cycle 当到达最大值的时候,将继续从头开始]
[Nocycle -- 一直累加,不循环]
[Cache ]
参考资料:百度百科-oraclesequence
如果没有必须累加1的要求,允许跳号的话,最好使用sequence, 没有性能问题。
可以在创建sequence的时候设定开始值就是100000,插入的时候用select sequenceName.Nextval 就可以自增长。
如果不采用这种方式,可以新建一张表存放当前ID的最大值,每次从这里取值,然后再update + 1. 记得需要for update锁表,以免并发时号码重复。不建议这种方式,性能比较差
可以通过设置序列(sequence)的形式实现:\x0d\x0a第一步:创建sequence,让 INCREMENT BY增长速度为1,START WITH(开始值为 1)。创建sequence语句如下:\x0d\x0aCREATE SEQUENCE SEQ_NO\x0d\x0a MINVALUE 1 --最小值\x0d\x0a NOMAXvalue -----没有最大值\x0d\x0a INCREMENT BY 1 ----每次递增1\x0d\x0a START WITH 1 -----开始值为1\x0d\x0a NOCACHE ----------不缓存\x0d\x0a NOCYCLE ; ---------不循环\x0d\x0a第二步:每次插入的时候直接\x0d\x0a”insert into tablename(ID) values(SEQ_NO.nextVal)“即可。
Oracle中没有已定义好的自动编号列,需要自己创建,下面总结Oracle 10g中自动编号列的创建方法:
1. 首先需要给要添加自动编号列的表创建索引,被索引的列就是后面要实现的自动编号列,这样的列往往是名为“ID”的列。创建索引可以通过OEM创建,也可以在SQL*Plus或PL/SQL中通过SQL语句创建。以方案LY中的表HARD为例,给其hard_id列创建索引的SQL语句为:
CREATE UNIQUE INDEX LY.HARD ON LY.HARD(hard_id);
2. 然后需要创建一个最小值为1,最大值不限,递增值为1的序列。序列的创建同样可以通过OEM或直接输入SQL语句创建。创建序列的SQL语句为:
drop sequence HARD_SEQ;
create sequence HARD_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 21
increment by 1
cache 20
order;
3.最后为表LY.HARD创建触发器,以实现在每次插入行时,hard_id列自动递增编号。触发器的创建同样可以方便的由OEM创建,也可以用SQL语句创建。下面为创建触发器的SQL语句:
CREATE OR REPLACE TRIGGER "HARD_ID_TRIGGER" BEFORE
INSERT ON "LY"."HARD" FOR EACH ROW
declare
next_checkup_no number;
begin
select hard_seq.nextval
into next_checkup_no
from dual;
:NEW.hard_id := next_checkup_no;
end;
需要注意的是,在用OEM创建触发器时,有可能出现“Failed to commit: 索引中丢失 IN 或 OUT 参数:: 1”的错误提示,在网上查阅了一些资料,认为这可能是Oracle中的一个BUG,所以建议使用SQL语句创建触发器。