Oracle中使用序列化来完成主键自增

本文详细介绍了在Oracle数据库中使用序列实现主键自增的方法,包括序列的创建、查询及在数据插入过程中的应用。同时,对比了在MyBatis中使用BEFORE和AFTER两种方式获取非自增主键的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. Oracle中使用序列化来完成主键自增

Oracle数据库中,并没有主键自增这一说法,而是通过序列化完成自增主键值的获取

create table emp_721(

​    emp_id number(11) primary key,

​    emp_name varchar2(20) not null,

​    emp_mail varchar2(30) not null,

​    emp_gender number(1) not null,

​    dept_id number(10) not null

);



-- 以下sql报错(没有插入主键),那么如何实现主键自增呢

insert into emp_721 (emp_name,emp_mail,emp_gender,dept_id)

values('张益达','zdp@qq.com',1,1);

 

-- oracle数据库中要实现主键自增,我们必须使用序列

create sequence seq_2020721;

 

-- sequence查询

select seq_2020721.nextval from dual; -- 查询下一个值,并使用


select seq_2020721.currval from dual; -- 查询序列当前的使用的值

 

-- 所以开发中,Oracle数据库表数据新增,对NUmber的主键来说,都使用序列进行自增

insert into emp_721 (emp_id,emp_name,emp_mail,emp_gender,dept_id)

values(seq_2020721.nextval,'张大炮','zdp@qq.com',1,1);

oracle设置序列化;

二. Oracle获取非自增主键的值

BEFORE版:先查询再新增数据

<!--
		Oracle环境下获取非自增主键的值 
		public void insertEmp(Emp emp);
	 -->
	 <insert id="insertEmp" databaseId="oracle">
	 	<!-- 
	 		selectKey : 表示查询一个值,作为新增数据的主键
	 			keyColumn : 数据表中的主键列名
				keyProperty : 对应主键实体类的属性名
				order:表示是在新增之前执行查询还是新增之后执行查询
					BEFORE : 表示新增之前
					AFTER : 表示新增之后
	 	 -->
	 	<selectKey keyColumn="emp_id" keyProperty="empId" resultType="int" order="BEFORE">
	 		select seq_2020721.nextval from dual
	 	</selectKey>
	 	insert into emp_721(emp_id,emp_name,emp_mail,emp_gender,dept_id) values(#{empId},#{empName},#{empMail},#{empGender},#{deptId})
	 </insert>

AFTER版:先新增数据,后查询

<!--
		Oracle环境下获取非自增主键的值 
		public void insertEmp(Emp emp);
	 -->
	 <insert id="insertEmp" databaseId="oracle">
	 	<!-- 
	 		selectKey : 表示查询一个值,作为新增数据的主键
	 			keyColumn : 数据表中的主键列名
				keyProperty : 对应主键实体类的属性名
				order:表示是在新增之前执行查询还是新增之后执行查询
					BEFORE : 表示新增之前
					AFTER : 表示新增之后
	 	 -->
	 	<selectKey keyColumn="emp_id" keyProperty="empId" resultType="int" order="AFTER">
	 		select seq_2020721.currval from dual
	 	</selectKey>
	 	insert into emp_721(emp_id,emp_name,emp_mail,emp_gender,dept_id) values(seq_2020721.nextval,#{empName},#{empMail},#{empGender},#{deptId})
	 </insert>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值