oracle 数据库 数据表自动生成序号 怎么添加

oracle 数据库 数据表自动生成序号 怎么添加,第1张

需要先创建序列,然后nextval添加数据使其自动生成序号。

1、创建表:

create table test

(id int,

name varchar2(20));

2、创建序列:

Create sequence seq_test_id

Increment by 1

Start with 1

Maxvalue 999999

Minvalue 1

Nocycle

nocache;

3、插入数据:

insert into test values (seq_test_idnextval,'badkano');

4、再插入一条数据:

insert into test values (seq_test_idnextval,'百度知道团长');

这样可见,序号是添加成功的。

1、使用序列+触发器

即新建一个序列,再在表上面创建一个触发器,当新增表数据时,触发器默认给PK从序列中获取值进行赋值

2、查询MAX+1

即在insert时,先将PK的最大值查询出来,在上面+1,为新的PK,也是可以的

其实Oracle是没有SQL Server 的自增长的列的概念。

我通过这种方式就是为了尽可能模拟。

seq_a 是序列号

insert into t_a (id, value) values(seq_anextval,'test'); 这就是Oracle的经典(后者通常)的使用方法。

id当然就是你所谓的自增长列(再次强调,Oracle没有这个概念)

只有通过触发器+sequence,能够实现你所谓自增长列。

1、首先要保证该数据库用户有删除序列和新建序列的权限,存储过程中这个权限要显示赋权:

grant

create

sequence

to

数据库用户;

grant

drop

any

sequence

to

数据库用户;

2、存储过程中创建序列和删除序列:

创建序列:

execute

immediate

'create

sequence

序列名'

||

chr(10)

||

'minvalue

1'

||

chr(10)

||

'maxvalue

999999999999999999999999999'

||

chr(10)

||

'start

with

1'

||

chr(10)

||

'increment

by

1'

||

chr(10)

||

'cache

20';

删除序列:

execute

immediate

'drop

sequence

序列名';

oracle的自增需要依靠序列和触发器共同实现

比如

先创建一个表

create table test(id int primary key,

name varchar2(10));创建一个序列

create sequence test_seq

increment by 1

start with 1

minvalue 1

maxvalue 9999999999999

nocache

order;触发器实现

create or replace trigger test_trigger

before insert on testfor each row

begin

select test_seqNextval into:newid from dual;

end;然后你试试吧

insert into test (name) values ('张三');

使用比较灵活,就是一个计数器,被查询一次nextval就自加(可以正数或者负数),并且可以被cache到内存中,防止热点问题。

缺点是需要人工干预,不想sqlserver那样有一个数据库系统内部维护的自加列。

以上就是关于oracle 数据库 数据表自动生成序号 怎么添加全部的内容,包括:oracle 数据库 数据表自动生成序号 怎么添加、oracle数据库达到数据库的序列化有几种方式因为我看到的数据库没有看见有序列并且可以达到序列的效果、oracle数据库怎么建sequences作为自增长序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9368196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存