mybatis mysql:
<insert  id="insertInviteList"  parameterType="java.util.List">
<![CDATA[
insert into inviteTable(userId,type,inviteName,dateLine,deadLine
) values
<foreach collection="list" item="fieldItem" index="index"  separator=",">  
(#{fieldItem.userId},#{fieldItem.type},#{fieldItem.inviteName},unix_timestamp(),#{fieldItem.deadLine})
</foreach>  
]]> 
</insert>这里头批量插入数据,但是有一个问题,我想如果type和inviteName已经存在的话,就不插入新纪录该如何实现? 考虑过用组合主键,但如果组合主键的话会有一个问题,例如10条纪录中第3条插入失败,可能后面7条也会被跳过,所以问一下高手有没有办法解决?谢谢。

解决方案 »

  1.   

    type和inviteName加唯一索引  然后用ignore into 代替insert into
      

  2.   


    是不是改成这样:<insert  id="insertInviteList"  parameterType="java.util.List">
    <![CDATA[
    insert ignore into inviteTable(userId,type,inviteName,dateLine,deadLine
    ) values
    <foreach collection="list" item="fieldItem" index="index"  separator=",">  
    (#{fieldItem.userId},#{fieldItem.type},#{fieldItem.inviteName},unix_timestamp(),#{fieldItem.deadLine})
    </foreach>  
    ]]> 
    </insert>type和inviteName加唯一索引: PRIMARY KEY  (`type`,`inviteName`),
      

  3.   

    如果是innodb的话  主键最好还是用自增id  
    alter table tbname   add unique index(type,invitename)
      

  4.   

    设置 (type,inviteName)主键或者唯一键,然后可以使用 insert ... on duplicate update ..