十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
oracle数据表没有自动增长列的功能,但可以在插入数据的时候通过序列sequence实现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
先在数据库中新增一个序列,如在oracle数据库中执行如下语句新增一个名为test_seq的序列
CREATE
SEQUENCE
test_seq
INCREMENT
BY
1
--
每次加几个
START
WITH
1
--
从1开始计数
NOMAXVALUE
--
不设置最大值
NOCYCLE
--
一直累加,不循环
以后你往某表中插入数据时,直接用如下形式就行了,比如:
insert
into
test_table
VALUES
(test_seq.nextval,
......)
test_table的第一列就是你要自增的那个id,test_seq.nextval就是从新增的序列中取出下一个值,每取一次都会+1.
当然,一般来说不同的表需使用不同的序列,这样它们的id可以保证连续
oracle sql developer建表的时候id字段的自动递增的设置方法和步骤如下:
1、首先,打开sql
server数据库,创建一个新表,然后在表中创建id字段并选择int类型,如下图所示,然后进入下一步。
2、其次,完成上述步骤后,选择id字段,然后在下面的列属性中找到标识规范,如下图所示,然后进入下一步。
3、接着,完成上述步骤后,单击标识规范,可以看到默认值为“否”,这表示不递增,如下图所示,然后进入下一步。
4、然后,完成上述步骤后,将标识规范调整为“是”,将“标识增量”设置为1,然后单击保存按钮,如下图所示,然后进入下一步。
5、最后,完成上述步骤后,添加数据时ID将自动递增,如下图所示。这样,问题就解决了。
Oracle 自动生成标识列可以用序列。
a)创建序列:
create sequence 序列名
start with 起始位置
increment by 增量大小
maxValue 最大值(没有这些nomaxValue)
[cycle/nocycle(是否循环)];
例如:
create sequence seq_stu increment by 1 start with 001 nomaxvalue nocycle;
b)序列中的两个特殊属性:
.nextVal :下一个序列的值
.currVal :当前序列的值;
特别注意:只要用户使用了.nextVal 那么序列值就会增加一个增量,
eg:select seq_stu.nextVal from DUAL;序列值依然会增加一个增量!
c)两个特殊属性的使用:
加入学生信息表的StuId列是主键列,需要自己增长:
insert into StuInfo values ('Stu'||to_char(Sysdate,'yyyymmdd')||seq_stu.nextVal,....);
最后录入的学号就会是'Stu20111218001序列值' 。
跟你一个解决办法吧
1. 创建一个序列
CREATE SEQUENCE SEQ_DEMO
INCREMENT BY 1
START WITH 0
NOMAXVALUE
NOCYCLE
NOCACHE;
2. 替换触发器赋值部分
:NEW.ord_id := to_char(sysdate,'yyyyMMdd') || lpad(to_char(mod(SEQ_DEMO.nextval,1000)),3,'0')