各数据库如何实现自增

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

原文地址:https://www.cnblogs.com/seven717/p/12629223.html