• 各数据库如何实现自增


    orcale

    Oracle没有自动增长机制,需要自己去实现。一般有两种方式,但是这两种方式都与序列化有关。

    第一种方式:序列化+触发器;

    第二种方式:序列化+显示调用序列化。

    准备工作建表:

    //准备工作创建一张表
    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);

    方式一:序列化+触发器

    第一步:创建序列sequence

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

    第二步:建立触发器

    触发器的语法:
    
    create [or replace] tigger 触发器名 触发时间 触发事件
    on 表名
    [for each row]
    begin
     pl/sql语句
    end
    其中:
    
    触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
    触发时间:指明触发器何时执行,该值可取:
      before:表示在数据库动作之前触发器执行;
      after:表示在数据库动作之后触发器执行。
    触发事件:指明哪些数据库动作会触发此触发器:
      insert:数据库插入会触发此触发器;
      update:数据库修改会触发此触发器;
      delete:数据库删除会触发此触发器。
    表 名:数据库触发器所在的表。
    for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
    

      

    //:new表示新插入的那条记录
    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;

    第三步:插入数据测试看dept_sort是否自增

    insert into dept_p values('001', '安保部', '000', 1);
    select * from dept_p;

    方式二:序列化+显示调用

    第一步:创建序列sequence

    //创建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);

    第三步:查询进行查看

    select * from dept_p 

    注:

    //查看序列当前值和下一个值的查看方式
    select seq_on_dept.currval from dual;
    select seq_on_dept.nextval from dual; 

    MySQL

    创建表的时候设置自增主键
    create table user(
    id int(32) primary key auto_increment,
    username varchar(20)
    );
    

     创建表后将字段设置为自增主键

    alter table user add primary key (id);
    

     DB2

    CREATE  TABLE
    T_RUNNING_THREAD
    (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1 ),
    NAME VARCHAR(150),
    BEGINTIME VARCHAR(50),
    ENDTIME VARCHAR(50),
    DESC VARCHAR(4000),
    SUCCESSFLAG CHARACTER(1),
    PRIMARY KEY (ID)
    )
    

    ————————————————
    原文链接:https://blog.csdn.net/u013132035/article/details/80357234

    https://www.cnblogs.com/sharpest/p/7764662.html

    https://blog.csdn.net/qq_28140549/java/article/details/84983826

  • 相关阅读:
    【软件教程】oracle11g数据库的下载和安装
    (一)最新VMware vSphere Data Protection(VDP) 6.1.11 的安装过程
    缓存与库先写哪个,这十几张图告诉你
    因为它,差点无缘大厂梦!!!
    从小公司进入大厂,我都做对了哪些事?
    毕业一年后接私活赚了10w,还拿了几家大厂offer!
    同样是持久化,竟然有这么大的差别!
    硬核!15张图解Redis为什么这么快
    面试时说Redis是单线程的,被喷惨了!
    【漫画】活见鬼,明明删除了数据,空间却没减少!
  • 原文地址:https://www.cnblogs.com/seven717/p/12629223.html
Copyright © 2020-2023  润新知