天天看点

MyBatis-------唯一键冲突(只适用于MySQL)

一、概述

         在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。

        现在有一张表,其拥有一个唯一索引的EMPLOYEE_ID字段,那么在其它insert语句中,插入的EMPLOYEE_ID值已经在表中拥有,那么可以使用ON DUPLICATE KEY UPDATE  子句 来更新已有EMPLOYEE_ID的那条记录。       

<insert id="saveEntity">
        INSERT INTO t_table (
          SOCIAL_NO,
          HOUSE_FUND_ACCOUNT,
          EMPLOYEE_ID,
          CREATE_DATE,
          CREATE_USER_ID,
          UPDATE_DATE,
          UPDATE_USER_ID
        ) VALUES (
          #{socialAccount},
          #{houseFundAccount},
          #{employeeId},
          now(),
          #{createdUserId},
          now(),
          #{createdUserId}
        ) ON DUPLICATE KEY UPDATE
         SOCIAL_NO = VALUES(SOCIAL_NO),
         HOUSE_FUND_ACCOUNT = VALUES(HOUSE_FUND_ACCOUNT),
         EMPLOYEE_ID = VALUES(EMPLOYEE_ID),
         UPDATE_DATE = now(),
         UPDATE_USER_ID = VALUES(UPDATE_USER_ID)
    </insert>

    <insert id="saveentity">
    insert into t_table (
            social_no,
            house_fund_account,
            employee_id,
            create_date,
            create_user_id,
            update_date,
            update_user_id
            ) values (
            #{socialaccount},
            #{housefundaccount},
            #{employeeid},
            now(),
            #{createduserid},
            now(),
            #{createduserid}
        ) on duplicate key update
    social_no = values(social_no),
    house_fund_account = values(house_fund_account),
    employee_id = values(employee_id),
    update_date = now(),
    update_user_id = values(update_user_id)
    </insert>