Mysql插入数据,存在则更新,否则插入

Mysql插入一条数据,存在就更新,不存在就插入(必须有唯一键)

mysql表中,有个联合唯一索引

CREATE TABLE `news_visite` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `news_id` bigint(11) DEFAULT NULL COMMENT '资讯ID',
  `user_id` bigint(11) DEFAULT NULL COMMENT '用户ID',
  `read_time` datetime DEFAULT NULL COMMENT '浏览时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `unikey` (`news_id`,`user_id`) USING BTREE COMMENT '唯一索引,不存在则插入,已存在则更新'
) ENGINE=InnoDB AUTO_INCREMENT=6880 DEFAULT CHARSET=utf8mb4 COMMENT='作品浏览记录';

方式一:
INSERT...ON DUPLICATE KEY UPDATE,如果指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引PRIMARY KEY出现重复值,则执行UPDATE

mybatis xml,传入 List<Long> newsIds,Long userId,Date readTime

<insert id="insertOrUpdate">
		INSERT INTO news_visite (news_id, user_id, read_time)
		VALUES
		<foreach collection="newsIds" item="id" open="(" separator="),(" close=")">
			#{id},#{userId},#{readTime}
		</foreach>
		ON DUPLICATE KEY UPDATE read_time = now()
	</insert>

方式二:

REPLACE关键字,使用REPLACE的最大好处就是可以将DELETEINSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETEINSERT时添加事务等复杂操作了。
在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的。
在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明没有重复的记录,如果返回2,说明有重复记录,系统先DELETE这条记录,然后再INSERT这条记录。
语法和INSERT非常的相似,如下面的REPLACE语句是插入或更新一条记录。

mybatis xml,传入 List<Long> newsIds,Long userId,Date readTime

<insert id="insertOrUpdate">
	REPLACE INSERT INTO news_visite (news_id, user_id, read_time)
	VALUES
	<foreach collection="newsIds" item="id" open="(" separator="),(" close=")">
		#{id},#{userId},#{readTime}
	</foreach>
</insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值