个人网站 可以做淘宝客吗,小程序商城设计,网络工程师证书报考条件,北京社保网站减员怎么做Oracle实现主键自增有4种方式#xff1a;
Identity Columns新特性自增#xff08;Oracle版本≥12c#xff09;创建自增序列#xff0c;创建表时#xff0c;给主键字段默认使用自增序列创建自增序列#xff0c;使用触发器使主键自增创建自增序列#xff0c;插入语句
Identity Columns新特性自增Oracle版本≥12c创建自增序列创建表时给主键字段默认使用自增序列创建自增序列使用触发器使主键自增创建自增序列插入语句insert时使用自增序列代替值 数据库表名称为userinfo不能使用useruser为Oracle关键字
方式一Identity Columns新特性自增
该种方式要求Oracle版本≥12c
在自增字段后使用以下2种语句的1种
generated by default as IDENTITYgenerated always as identity 建表语句
CREATE TABLE userinfo (id number(11) generated by default as IDENTITY,--使用自增功能name varchar2(20) ,age number(3)
)测试
INSERT INTO USERINFO (name,age) VALUES(张三,18)结果
该种方式很简单底层原理其实和下面3种方式相似只是Oracle帮我们省去了多余的操作。
以下是剩余的3种方式都用共同的特点先创建自增序列
准备工作 必须先创建自增序列
--设置自增序列名称为seq_userinfo名字任意命名
create sequence seq_userinfoincrement by 1 --每次1 start with 1 --从1开始nomaxvalue --不限最大值nominvalue --不限最小值cache 20; --设置取值缓存数为20sequence各个参数详解可以参考这边文章 参考文章
方式二创建自增序列创建表时给主键字段默认使用自增序列
建表语句设置自增字段默认使用自增序列推荐该方式
–创建userinfo表
CREATE TABLE userinfo (id number(11) DEFAULT seq_userinfo.nextval, --seq_userinfo为自增序列名称name varchar2(20) ,age number(3)
);测试我使用的是DBeaver软件
如图
注意新增了一条数据点击保存该软件并不会立刻自动显示生成的ID我们需要关闭当前页签再打开就可以看到自增的ID了
如下 方式三创建自增序列使用触发器使主键自增
建表语句
–创建userinfo表
CREATE TABLE userinfo (id number(11) not null,name varchar2(20) ,age number(3)
);创建触发器只需要注意注释的位置
-- 创建触发器名称为deptinfo_TRIGGER名字任意命名
create or replace trigger userinfo_TRIGGER
before insert on userinfo --userinfo为表名称
for each row
begin
select seq_userinfo.nextval into :new.id from dual; --1、seq_userinfo为自增序列名称 2、这里的id是你需要自增的序列
end userinfo_TRIGGER; --userinfo_TRIGGER为触发器名称测试跟方式1测试一样会存在不显示ID问题
如图
重新打开页签
如下
方式四创建自增序列插入语句insert时使用自增序列代替值
建表语句
–创建userinfo表
CREATE TABLE userinfo (id number(11) not null,name varchar2(20) ,age number(3)
);在插入语句中自增的字段ID使用自增序列去代替
如下
INSERT INTO userinfo(id,name,age) VALUES(seq_userinfo.nextval,睡竹,18);注意方式三与MySQL、微软的SQL server的自增方式是一样的
运行结果 总结 对后台系统开发来说
方式1和方式2最方便
方式3还需要新加一个触发器不推荐
方式4类似于方式2但是对Java程序而言mybatis的xml需要显式的指定触发器不够友好
附上删除触发器和自增序列的语句
--删除自增序列,seq_userinfo为自增序列的名称
drop sequence seq_userinfo
--删除触发器userinfo_TRIGGER为触发器名称
drop trigger userinfo_TRIGGER