我想在添加 一条数据的时候,同时更新一条数据。或者说,我想添加一条数据时,将id值赋值给另一个字段。
不用更新 语句去更新另一个字段,只想在添加时,同时用sql语句来将id值,赋值给另一个字段
我在用Mybatis时,用的是<insert 标签。 不知道怎样做嘞?。。
下面这样做的语句,肯定是错的,但是,还是找不到解决的办法或思路哈
<insert id="insertCommentTargetId" parameterType="java.lang.Integer">
insert into comment_global values ();
update comment_global set comment_target_id = (select max(id) from comment_global)
</insert>
UPDATE comment_global
SET comment_target_id = (select id from (
SELECT max(id) as id FROM comment_global
) as c)
在代码中先 insert 再去拿到id 去 update,分成两步操作好好一点。
题主,你可以把下边的sql语句改成你自己的需求的就可以了
String procedureSQL = "create procedure USER_EXIST(in loginName varchar(50),out amount int)" +
"select count(*) from sys_menu";
String trigger = "create TRIGGER bj_customer before insert on t_user"+
" for each row begin insert into t_role(id,rolename) values(new.id,new.username);end";
try {
Connection connection = getConnection();
PreparedStatement prepareStatement = connection.prepareStatement(trigger);
prepareStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
创建一个触发器吧,你试试
create trigger 触发器名字
after insert on comment_global
for each row
begin
update comment_global set comment_target_id = (select max(id) from comment_global);
end;
不建议在SQL中一次性解决你的需求,也不建议使用触发器。因为你的这个需求是业务需求,需要通过业务代码来控制,所以建议拆分成2个操作来实现。
1、新增操作,Mybatis会自动返回新增数据,你可以拿到新增数据的ID;
2、更新操作,把ID更新到对应字段中;
3、添加事务控制,如果新增或者更新操作出现问题,回滚操作;
建议你分两步操作,新插入,然后更新,在加入事务管理。