添加一条新数据并返回此数据的ID(主键)

本文详细解析了MyBatis框架中如何配置主键自增,包括useGeneratedKeys参数的必要性,keyProperty用于指定POJO对象的主键属性名,以及keyColumn对应数据库的主键字段名。

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

原文地址:https://blog.youkuaiyun.com/u011897110/article/details/79493044

<insert id="" parameterType="" useGeneratedKeys="true" keyProperty="id" keyColumn="id">

useGeneratedKeys:必须设置为true,否则无法获取到主键id。 
keyProperty:设置为POJO对象的主键id属性名称。 
keyColumn:设置为数据库记录的主键id字段名称。

### 实现向两个表插入数据利用自增主键 为了实现在 MySQL 中向表 A 插入一行获取其自增主键 ID1 的同时,用这个 ID1 向表 B 插入另一行的操作,可以采用如下方法: #### 方法一: 使用 `LAST_INSERT_ID()` 函数 `LAST_INSERT_ID()` 函数用于返回当前会话中最后一条 `INSERT` 或者 `UPDATE` 语句所生成的第一个自增值。此函数不会受到发事务的影响,在同一个客户端连接内始终有效。 ```sql START TRANSACTION; -- 向表A插入新记录 INSERT INTO table_a (column1, column2) VALUES ('value1', 'value2'); -- 获取刚插入记录的自增ID SET @last_inserted_id = LAST_INSERT_ID(); -- 使用获得的自增ID作为外键向表B插入关联记录 INSERT INTO table_b (foreign_key_to_table_a, other_column) VALUES (@last_inserted_id, 'other_value'); COMMIT; ``` 这种方法确保了即使有多个客户端同时操作数据库也不会发生冲突,因为每个客户端都有自己独立的 `LAST_INSERT_ID()` 值[^1]。 #### 方法二: 使用存储过程封装逻辑 创建一个存储过程来处理这两个表之间的关系,这样可以使业务逻辑更加清晰,且易于维护。 ```sql DELIMITER $$ CREATE PROCEDURE InsertIntoTwoTables( IN param_val1 VARCHAR(255), IN param_val2 INT, OUT inserted_id BIGINT ) BEGIN START TRANSACTION; INSERT INTO table_a (col1, col2) VALUES (param_val1, param_val2); SET inserted_id = LAST_INSERT_ID(); IF inserted_id IS NOT NULL THEN INSERT INTO table_b (ref_col_from_a, another_field) VALUES (inserted_id, some_other_value); END IF; COMMIT; END$$ DELIMITER ; ``` 调用上述存储过程时可以通过传递参数完成两步插入动作,通过输出参数拿到第一个表中的自增ID[^4]。 这两种方式都可以有效地解决在一个事务范围内先后两次插入不同表格的需求,同时也保证了一致性和原子性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值