• oracle主键自增


    前言

    众所周知,MySQL数据库的主键自增设置非常简单,任何一个常用的可视化工具都支持,只要打一下勾就可以开启主键自增了。然而Oracle并没有那么简单,它需要执行几个简短语句。

    操作步骤

    为了方便讲解,SQL脚本中的表用 tableName,主键为 id

    1. 创建序列sequence

    sequence命名建议为表名_主键_seq,因为oracle会把所有的sequence放到同一张表里,若不好好区分,非常容易发生创建sequence冲突。

    create sequence tableName_id_seq
    -- 从主键从1开始
    	minvalue 1
    -- 不设置最大值
    	nomaxvalue
    -- 每次增加1
    	increment by 1
    	nocache;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 创建触发器trigger

    trigger命名规范同sequence,必须要先创建sequence,再创建触发器。建议不要两个语句同时运行,多数情况语句会并发进行,trigger创建时若sequence没有先创建完成,执行结果是两条语句都成功,但实际操作时会导致主键自增失败。

    create trigger tableName_id_tri
    	before insert on tableName for each row when (new.id is null)
    begin
    	select tableName_id_seq.nextval into:new.id from dual;
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. Mybatis-plus (根据自己使用的ORM框架而定)

    主键类型设置为自增
    @TableId(type=IdType.AUTO)

    设置主键自增常用辅助语句

    1. 查询当前最大的主键id序号

    select max(id) from tableName;
    
    • 1

    2. 查看sequence的详细信息

    table_id_seq指是自己设置的sequence名称

    select * from USER_SEQUENCES where SEQUENCE_NAME = 'table_id_seq';
    
    • 1

    3. 设置last_number

    注意:这个你不一定有权限能修改,除非你就是管理员用户

    update user_sequence set last_number 200 where SEQUENCE_NAME = 'table_id_seq';
    
    • 1

    4. 删除sequence

    drop sequence table_id_seq;
    
    • 1

    5. 查看全部sequence

    select * from USER_SEQUENCES;
    
    • 1

    6. 查看全部触发器

    select trigger_name,table_name from all_triggers where table_name = 'tableName';
    
    • 1

    7. 删除trigger

    drop trigger table_id_tri
    
    • 1
  • 相关阅读:
    实时嵌入式系统环境中敏捷的基础
    GetX导航学习笔记
    4K三路虚拟情景互动教学软件应用开发
    Python图像处理丨认识图像锐化和边缘提取的4个算子
    基于用户行为的交易反欺诈探索
    全年冲刺200万辆!座舱域控制器进入「软硬升级」周期
    数据库版本控制|一文带你快速入门
    【1】Anaconda基本命令以及相关工具:jupyter、numpy、Matplotilb
    虚拟化+Docker基本管理
    2021年雄安新区发展研究报告
  • 原文地址:https://blog.csdn.net/interestANd/article/details/126787087