MyBatis-------唯一键冲突(只适用于MySQL)
一、概述
在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。
现在有一张表,其拥有一个唯一索引的EMPLOYEE_ID字段,那么在其它insert语句中,插入的EMPLOYEE_ID值已经在表中拥有,那么可以使用ON DUPLICATE KEY UPDATE 子句 来更新已有EMPLOYEE_ID的那条记录。
如果需要使用最新传递的值,可以用Mybatis的VALUES( 数据库字段 ) 来设置。
<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>