Oracle和MySQL插入数据后返回主键ID

本文介绍了在MySQL和Oracle数据库中实现主键自增的两种方法。在MySQL中,通过在mybatis.xml的insert标签中设置useGeneratedKeys='true'和keyProperty='id'来获取自动生成的主键。而在Oracle中,可以通过使用序列和selectKey标签配合BEFORE或AFTER订单来生成主键。无论哪种方式,插入数据后,都可以直接通过插入对象的get方法获取主键值。

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

一、MySQL

1、mybatis.xml配置

在insert标签中添加两个属性useGeneratedKeys="true"和keyProperty="id",其中keyProperty中的id为自己表的主键字段

<insert id="" useGeneratedKeys="true" keyProperty="id"></insert>

2、取值

在Controller或者ServiceImpl中直接用插入对象的get方法

二、Oracle

1、通过序列自增长

①、在insert标签中编写selectKey标签,并且order="BEFORE"

order:可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先生成主键、设置keyProperty后执行插入语句。如果设置为AFTER,那么先执行插入语句,然后再生成主键。

<insert id="" keyProperty="id">
    	<selectKey order="BEFORE" keyProperty="id">
    		select 序列.NEXTVAL from dual
    	</selectKey>
    	insert into user (id,username) values(#{id},#{username})
    </insert>

 ②、取值

在Controller或者ServiceImpl中直接用插入对象的get方法

2、通过触发器和序列自增长

 ①、在insert标签中编写selectKey标签,并且order="AFTER"

<insert id="" keyProperty="id">
    	<selectKey order="AFTER" keyProperty="id">
    		select 序列.NEXTVAL from dual
    	</selectKey>
    	insert into user (id,username) values(#{id},#{username})
    </insert>

 ②、取值

在Controller或者ServiceImpl中直接用插入对象的get方法

 

### Oracle MySQL主键的区别 #### 主键定义方式差异 在数据库设计中,Oracle MySQL 对于主键的定义存在一些不同之处。对于 Oracle 数据库而言,在创建表时可以通过 `CREATE TABLE` 语句中的 `PRIMARY KEY` 约束来指定列作为主键[^1]。 而在 MySQL 中同样支持通过类似的语法结构声明主键,不过值得注意的是,默认情况下 MySQL 使用 InnoDB 存储引擎会自动为未显式提供整数类型的主键字段添加隐藏自增属性[^2]。 ```sql -- Oracle 创建带主键的表 CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50) ); -- MySQL 创建带主键的表 (InnoDB 引擎默认行为) CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50) ); ``` #### 自动编号机制的不同实现 当涉及到自动增长特性时,两种数据库管理系统有着不同的处理逻辑。Oracle 提供序列(Sequence)对象用于生成唯一数值,并且可以与触发器配合使用以确保每次插入新记录时都能获得新的主键值;而 MySQL 则更倾向于内置此功能到其数据类型本身当中去,比如上述例子中的 `AUTO_INCREMENT` 关键字就是用来指示该列为自动生成递增值的主键列。 #### 锁定策略影响下的性能考量 由于锁定策略上的区别也会影响到主键操作效率方面的问题。正如之前提到过关于锁开销数据安全之间的权衡关系一样,在高并发场景下如何有效地管理这些资源变得尤为重要。通常来说,大多数商用级的关系型数据库服务器都会采用行级别锁定方案以便更好地平衡两者间的需求。然而具体到 Oracle 或者 MySQL 上,则可能因为内部架构以及优化措施等因素造成实际表现有所偏差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值