欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle数据库实现字段自增

程序员文章站 2022-05-31 21:36:41
...

在用Oracle时,出现了这样一个状况,添加模块时,只传入了一个模块名称,而表中还有一个模块ID,这个ID设定的是自增。但是在Orac

在使用Sql Server时,为了使得每条记录不会重复,加入了一个自增字段,并且将其设为主键。现在放开这样做的优劣。单单只说实现问题。

在用Oracle时,出现了这样一个状况,添加模块时,只传入了一个模块名称,而表中还有一个模块ID,这个ID设定的是自增。但是在Oracle中没有字段自增这个功能。但是可以通过自己写序列、触发器来实现这样的一个功能。

先说一下自增这个功能:自增,无非就是在插入的时候,自增的字段按照某种序列实现自动加一并且赋值。那么我们就再Oracle中创建一个序列,并且创建一个触发器,使其在插入的时候,序列自增1并且对自增字段进行赋值。

我用的是PL/SQL进行的可视化创建。

创建序列:

Oracle数据库实现字段自增

Name:序列的名字

Min Value:最小计数

Max Value:最大计数

Star with:从几开始

Increment by:步长

Cache Size:缓存序列

指定Cache,oracle会预先在内存中防止一组指定大小的序列,当使用完这些后再生成下一组,这样会存取的快些,但当数据库关闭等情况时,下一次再生成序列时可能会使序列间断,不是遗传连续的号,当不是特别需要连续的序列时,最好制定;

不填写Cache,会使用默认设置;当Cache设置为0或nocache,会产生连续的序列。

Cycle:循环序列,当达到最大值后,从最小值重新开始

Order:保证序列产生的顺序和请求的顺序是一直的,在并行模式下,,如果A、B同时对序列请求,那么先产生的序列号必然返回给先请求的用户。这种情况只发生在oracle并行服务器上(目前还没有接触),大多数情况下部需要。

创建触发器:

Oracle数据库实现字段自增

语句级(Statementlevel)触发器,在CreateTrigger语句中不包含foreachrow子句。语句级触发器对于触发事件只能触发一次,而且不能受触发器影响的每一行的列值。一般用与剧集触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行和什么时间执行。

行级(Row-level)触发器,在CreateTrigger语句中包含ForEachRow子句。行级触发器可对受触发器影响的每一行触发,并且能够访问原列值和通过SQL语句处理的新列值。行级触发器的典型应用是当需要知道行的列值时,执行一条事务规则。

确定后,会出现下面的画面

Oracle数据库实现字段自增

现在需要在begin和end中间插入一句话 select SEQ_MODEL.Nextval INTO :new.mdlID FROM dual;

不知道细心的你是不是看懂了上面的这句话?如果不能,那么看一下下嘛的补充

补充:

1)对于Insert语句,要呗插入的数值包含在new.column_name,这里的column_name是表中的一列

2)对于Update语句,列的原值被包含在old_column_name中,数据列的新值在new.column_name中。

3)对于Delete语句,将要删除的行的列值放在old.column_name中。

Oracle数据库实现字段自增