一、概述
在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>