Mysql中添加 一条数据,同时更新这条数据中的另一个字段值,为id值

我想在添加 一条数据的时候,同时更新一条数据。或者说,我想添加一条数据时,将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、添加事务控制,如果新增或者更新操作出现问题,回滚操作;

建议你分两步操作,新插入,然后更新,在加入事务管理。