一、Oracle ID自增长功能介绍
Oracle数据库默认不支持像 SQLServer、MySQL中的自增长(auto increment)功能,即自动为每一行记录的自增长字段生成下一个值。
二、Oracle ID自增长方法
第一种,通过序列(sequence)以及触发器(trigger)实现主键自增长。
序列是Oracle数据库中用来生成唯一数值的对象,可以类比于MySQL中的自增长。使用序列递增生成的数字当作主键时,防止并发访问时产生重复的主键值。
触发器可以在INSERT、UPDATE和DELETE操作执行之前或之后自动运行PL/SQL代码。对于使用序列生成自增长主键的情况,可以通过在插入语句之前定义一个触发器,在INSERT语句执行时触发自动生成下一个序列值。
这种方式适用于直接使用JDBC连接数据库。这种方式将主键自增长的任务完全交给数据库,我们无需在代码层面上进行任何控制。
第二种,通过序列(sequence)以及Hibernate(JavaWeb框架)配置实现自增长。
这种方式适用于通过Hibernate连接数据库的方式。这种方式在数据库上创建序列,通过配置在POJO类上的注释,让Hibernate去调用数据库的序列实现自增长。
这两种方式都是通过Oracle的序列实现自增长,但第一种通过数据库的触发器在插入的时候自动插入主键。而后者则由Hibernate自动完成获取主键,插入主键这一操作。
三、Navicat创建--序列和触发器
序列和触发器的位置在【其他】选项里面。
3.1、创建表:保存时命名 T_STU
示例字段只需要一个id,一个name即可
3.2、序列-创建序列:保存时命名 Seq001
3.3、触发器-创建触发器:保存时命名 Trigger001
常规选项卡中:触发器类型选【TABLE】,表模式选【ROOT】,表明选择【T_STU】
高级选项卡中选填:引用旧【OLD】,引用新的【NEW】
定义选项卡中:需要将序列Seq001的序号查出来并放入T_STU表的id中。
BEGIN
select "Seq001".nextval into :NEW."id" from dual;
END;
3.4、最后看一下预览SQL
其中"Untitled"是未保存的默认触发器名。
3.5、最后一步插入数据观察递增情况
四、SQL语句创建--序列和触发器
-- 创建表
CREATE TABLE "T_STU" (
"id" NUMBER NOT NULL PRIMARY KEY,
"name" VARCHAR2(255)
);
-- 创建序列
CREATE SEQUENCE "Seq01" MINVALUE 1 INCREMENT BY 1 NoMaxValue START WITH 1;
-- 创建触发器
create TRIGGER "Trigger01" BEFORE INSERT ON "T_STU"
FOR EACH ROW
BEGIN
SELECT "Seq01".nextval INTO :NEW."id" FROM dual;
END;
-- 插入数据
INSERT INTO "T_STU" ("name") VALUES ('小红');
-- 查看结果
SELECT * FROM "T_STU";