SQL获取第一个表的自增主键并作为另一个表的外键

方式一:@@IDENTITY

table1为主表,主键为自增的ID,在插入数据时ID不需要被赋值,自动插入;table2为从表,jlid为外键,与table1中的ID关联。

现在传入一条数据,需要同时在两个表插入数据,可以使用 @@IDENTITY 属性。

<!-- 在多条语句同时执行时,注意加 ; 分隔-->        

insert into table1 (除自增ID外的属性)VALUES(属性值);

select @@IDENTITY;

INSERT INTO table2(外键ID,      除自增ID、外键ID外的属性) 
            VALUES(@@IDENTITY,  其他属性值)
       

在一条或多条 INSERT、SELECT 语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT 语句失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

方式二:接收返回新增主键ID--可以用int接收,也可以在实体类中接收id

<insert id="saveId" parameterType="com.entity">
    <!--  通过mybatis框架提供的selectKey标签获得自增产生的ID值-->
    <!--  order="AFTER",声明当前select语句在insert后面执行-->
    <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="test.id">
		select LAST_INSERT_ID()
	</selectKey>

	insert into t_ern (alid) values (#{test.alid});
</insert>

方式三:on dupdate key update表中根据主键或唯一键来判断,有就修改,否则插入(没实现过)

<insert id="insertOrUpdate" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO user(id, user_id, name)
        VALUES (#{id}, #{userId}, #{name})
        ON DUPLICATE KEY UPDATE
        id = values(id) , user_id = values(user_id) ,name = values(name)
</insert>
@Override
public boolean user1(Long id,String userId,String name){
    User user = new User();
    user.setId(id);
    user.setUserId(userId);
    user.setName(name);
    mapper.insertOrUpdate(user);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值