merge into语句操作一个表产生重复记录的问题
阳二快跑 2014-01-06 04:12:26 需求:
产品评分表,一个产品同一个用户只能评一次分,且以最后一次为准。
最开始使用的方式是先update,如果影响行数为0,则进行插入。
后面修改为一条sql实现(mybatis):
MERGE INTO P_GRADE P0
USING DUAL
ON (P0.PRODUCT_ID = #{productId} AND P0.USER_ID = #{userId})
WHEN MATCHED THEN
UPDATE SET UPDATE_TIME = SYSDATE, USER_GRADE = #{userGrade}
WHEN NOT MATCHED THEN
INSERT
(PRODUCT_ID, CREATE_TIME, USER_GRADE)
VALUES
(#{productId}, #{userId}, SYSDATE, #{userGrade})
在测试环境中,用户少,没有产生重复的数据,但在正式环境就产生了产品id和用户id重复的数据(1%左右)。
请问merge into适用这个场景吗? 如果可以的话应该怎么改进这个sql。如果不适用的话,还有什么比较高效的方式来实现?