Oracle通过序列实现主键自增长

序列化+触发器#

一般选这种

只要建立好序列化+触发器,触发器会在我们插入数据时自动触发,帮助我们进行+1操作。

创建序列sequence,指定

复制代码
//准备工作创建一张表
create table dept_p(
    dept_id   VARCHAR2(40) not null,
    dept_name VARCHAR2(40),
    parent_id VARCHAR2(40),
    state     NUMBER(11),
    dept_sort NUMBER(11)
);
alter table DEPT_P add [constraint dept_id] primary key(dept_id);
复制代码

创建序列

create sequence seq_t_dept
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 50

建立触发器

create or replace trigger "dept_trig"
    before insert on dept_p
    referencing old as old new as new for each row
declare
begin
    select seq_t_dept.nextval into :new.dept_sort from dual;
end dept_trig;

此时报错:ORA-04089:无法对SYS拥有额对象创建触发器

那么只能再建一个公用账户,并赋予connect和resource角色来创建触发器

create user c##lyc identified by root;
grant connect, resource to c##lyc;

然后使用新建的用户登陆执行该指令

序列化+显式调用序列化#

-- 创建sequence
create sequence seq_on_dept
increment by 1
start with 1
nomaxvalue
nocycle
nocache;

显式调用序列

insert into dept_p values('001', '安保部', '000', 1, seq_on_dept.nextval);
posted @   BigBender  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-04-08 mysql 导出和导入数据
2020-04-08 tp5 数据库迁移工具 migrate&seed
2020-04-08 tp5模型一对一关联hasOne
2020-04-08 tp5文件上传
2020-04-08 tp5 获得当前表插入的最新自增id
2020-04-08 php-swagger安装和使用
2020-04-08 阿里巴巴人脸识别接口--phpsdk
点击右上角即可分享
微信分享提示
主题色彩