天天看點

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>