Oracle实现主键自增有3种方式:
- 创建自增序列,创建表时,给主键字段默认使用自增序列
- 创建自增序列,使用触发器使主键自增
- 创建自增序列,插入语句(insert)时,使用自增序列代替值
数据库表名称为:userinfo(不能使用user,user为Oracle关键字)
准备工作:
必须先创建自增序列:
--设置自增序列,名称为"seq_userinfo",名字任意命名
create sequence seq_userinfo
increment by 1 --每次+1
start with 1 --从1开始
nomaxvalue --不限最大值
nominvalue --不限最小值
cache 20; --设置取值缓存数为20
sequence各个参数详解,可以参考这边文章:
方式一:创建自增序列,创建表时,给主键字段默认使用自增序列
建表语句,设置自增字段默认使用自增序列(推荐该方式):
--创建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,age number(3)
);
在插入语句中,自增的字段(ID),使用自增序列去代替
如下:
INSERT INTO userinfo(id,name,age) VALUES(seq_userinfo.nextval,'睡竹',18);
注意:方式三与MysqL、微软的sql server的自增方式是一样的!
运行结果:
总结:
对后台系统开发来说:
方式1最方便
方式2还需要新加一个触发器,不推荐
方式3类似于方式1,但是对Java程序而言,mybatis的xml需要显式的指定触发器,不够友好
附上删除触发器和自增序列的语句:
--删除自增序列,"seq_userinfo"为自增序列的名称
drop sequence seq_userinfo
--删除触发器,"userinfo_TRIGGER"为触发器名称
drop trigger userinfo_TRIGGER
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。