oracle能用自增约束吗,oracle 给已存在的表增加主键自增约束

如果使用的是hibernate的主键自增约束,请参照点击打开链接。

这里只记录针对Oracle本身的自增约束。

步骤大概有3步,

1.创建表

2.创建序列sequence

3.设置触发器以应用sequence到表的主键

这里以AD_AUDIT_PLAN表为例。

create sequence AD_AUDIT_PLAN_SEQUENCE minvalue 1 maxvalue 99999999999999999999 start with 1 increment by 1 cache 20;

这里创建序列完毕。序列可以在数据库中找到(感觉类似创建了一张表)。这里是说创建一个叫AD_AUDIT_PLAN_SEQUENCE的序列,里面的最小值是1,最大值是20个9(多少个取决于你主键的位数,也可以在主键范围内取值),然后从1开始,每次自增1,缓存为20.

create or replace trigger ad_audit_plan_tg before insert on ad_audit_plan

for each row when (new.id is null)

begin

select ad_audit_plan_sequence.nextval into :new.id from dual;

end ad_audit_plan_tg;

这里创建触发器,并把表跟序列关联起来。我理解的是,序列只是一个存储1.2.3.4.5.。。。。的地方,当表中每次插入一条数据的时候就从序列中取一个数字当做主键插入表中,这个数字是唯一的,只能取一次,取过了序列里就没有这个数了。

这里还要注意,end后面要跟上触发器名,不然执行不成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,有多种方法可以实现自增主键。其中一种方式是使用Identity Columns新特性。这是在Oracle 12c及以上版本中引入的功能,它允许在创建时将主键字段指定为自增列。例如,可以使用以下语法创建一个带有自增主键: CREATE TABLE 名 ( 列名 数据类型 GENERATED ALWAYS AS IDENTITY ); 另一种方式是使用序列(sequence)来实现自增主键。可以先创建一个序列,然后在创建时将主键字段默认使用该序列。例如,可以使用以下语法创建一个自增序列并将其应用于主键字段: CREATE SEQUENCE 序列名 START WITH 初始值 INCREMENT BY 步长; CREATE TABLE 名 ( 列名 数据类型 DEFAULT 序列名.NEXTVAL PRIMARY KEY ); 除此之外,还可以使用触发器来实现自增主键。在创建时,可以先创建一个触发器,然后在插入语句(insert)时使用自增序列的值代替主键字段的值。 最后,如果不需要在创建时指定主键,可以在创建后使用ALTER TABLE语句来为添加主键约束,并使用自增序列作为主键的值。 因此,根据需要和Oracle版本的不同,可以选择适合的方式来设置自增主键。 [2 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Oracle实现主键字段自增](https://blog.csdn.net/weixin_42675423/article/details/127093117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Oracle设置主键自增](https://blog.csdn.net/TianNaLua/article/details/124281818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值